帮忙做下php正则
我要匹配一个字符串,代表一个函数的参数,比如:check("xi,呵,呵" ",3," sdf" s,df") 括号里面的字符串,我要把参数一个个给截取出来,也该怎么写正则啊?请看清楚需求,要求截取每个参数并以此放到数组里面去,只有字符串和数字两种参数类型,但是字符串里面可能有双引号和逗号,怎么样做?分不多,以后还有很多问题要解决,得省点。。。额。。真的不是我小气。
追问:func("he\",llo,",",",4,",word",93)这样的参数你那个正则能匹配出来吗?
答案:<?php
$a = pmatch("func(123, 456, 789)");
foreach($a as $b) { // 输出
echo $b."|";
}
function pmatch($str) // 用这个函数匹配
{
preg_match("/.+?\((.*?)\)/", $str, $match); // 先去除括号里的部分
$parameters = explode(",", preg_replace("/\s/", "", $match[1])); // 里面那个是去参数之间的空格
return $parameters;
}
?>
我也是初学这个,帮你理解一下,有错误的地方多多包涵,呵呵:
不能把一个字符类当作一个范围的终点使用:
首先,你得明白[]的作用, [] 这对中括号里包涵的东西,代表一个字符的匹配,比如[a-z]代表任意一个小写字母的匹配,注意,是一个,就是说,a-z是这个匹配的范围,再看你的例子:[A-[:lower:]] 外面这对中括号里的范围应该是A-[:lower:],这个[:lower:]是posix风格的字符类,代表一个小写字母,也就是完全等同于我前面写的那个[a-z],知识写法不一样,但是他不能作为外面那个中括号的范围的终点,ok,明白了吧?
ereg是php里的一个字符匹配函数,他最少需要两个参数,第一个一般就是个正则表达式,第二个是需要检查的字符串,第三个参数可选,是存放的数组,你的这个ereg('[@[:digit:][:upper:]]'); 只有一个参数,这个我也不大懂,可能第二个参数被默认成空字符串了吧,所以返回的bool类型应该是false,你可以用个if语句测试下。
上一个:php如何连接sybase 5.0数据库?
下一个:php 区分手机 和 pc 访问