好的,我是正则表达式的菜鸟,我正在使用这个网站作为我的正则表达式引物:
问题:使用s修饰符,下面的代码假设回显4,因为它找到了4个换行符。
然而,当我运行这个时,我得到一个(1),为什么?
<?php
/*** create a string with new line characters ***/
$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";
/*** look for a match using s modifier ***/
echo preg_match("/sex.at.noon/s", $string, $matches);
/*The above code will echo 4 as it has found 4 newline characters.*/
?>
答案 0 :(得分:6)
使用preg_match_all()
而不会在第一场比赛后停止。
preg_match()
返回模式匹配的次数。这将是0次(不匹配)或1次,因为preg_match()将在第一次匹配后停止搜索。相反,preg_match_all()
将持续到主题结束。如果发生错误,preg_match()
会返回FALSE
。 - PHP.net
但是,代码仍会仅输出1
,因为您匹配的是正则表达式“sex.at.noon”而不换行符
答案 1 :(得分:1)
preg_match()只返回0或1,因为它在模式第一次匹配后停止。如果你使用preg_match_all(),它仍会返回1,因为你的模式只匹配你匹配的字符串中的一次。
如果您想通过正则表达式获取新行数:
echo preg_match_all("/\n/m", $string, $matches);
或通过字符串函数:
echo substr_count($string, "\n");