Php preg_match给出的结果与perl字符串匹配不同
我想从字符串中获取房间号,条件为(以#开头,以空格或逗号结尾) 我的php代码是:Php preg_match给出的结果与perl字符串匹配不同,php,perl,Php,Perl,我想从字符串中获取房间号,条件为(以#开头,以空格或逗号结尾) 我的php代码是: preg_match('/(#.*?)[ ,]/', '112 east coast road #b1-15, 112 katong, singapore 428802', $match); if($match) { echo "match=".$match[0]; } else { echo 'not match'; } 输出为:match=#b1-15, 如您所见,将捕获一个逗号 而
preg_match('/(#.*?)[ ,]/',
'112 east coast road #b1-15, 112 katong, singapore 428802', $match);
if($match) {
echo "match=".$match[0];
}
else {
echo 'not match';
}
输出为:match=#b1-15,
如您所见,将捕获一个逗号
而我在perl中使用相同的模式
严格使用
my $str = "112 east coast road #b1-15, 112 katong, singapore 428802";
if($str =~ /(#.*?)[ ,]/) {
print "match = $1";
}
else {
print "not match";
}
输出为:match=#b1-15
有人能告诉我为什么以及如何纠正我的PHP模式匹配吗?他们实际上也这么做。只有返回给您的信息不同
preg_match
返回匹配数组。匹配检查输出完全匹配的模式
将返回preg_match
array(2
0 => #b1-15,
1 => #b1-15
)
第一个数组值是完全匹配的模式。第二个是第一个捕获的带括号的子模式,依此类推
请参阅
请参阅关于参数
匹配项的部分PHP将返回两个匹配项,因为您可以检查运行此项:
preg_match('/(#.*?)[ ,]/','112 east coast road #b1-15, 112 katong, singapore 428802', $match);
var_dump($match)
结果是:
array(2) {[0]=>string(7) "#b1-15,"[1]=>string(6) "#b1-15"}
第一个匹配是正则表达式的“全局”匹配,第二个对应于第一个组