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