正则表达式修饰符,不工作?

时间:2009-11-18 00:14:17

标签: php

好的,我是正则表达式的菜鸟,我正在使用这个网站作为我的正则表达式引物:

问题:使用s修饰符,下面的代码假设回显4,因为它找到了4个换行符。

然而,当我运行这个时,我得到一个(1),为什么?

link text

 <?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.*/

?>

2 个答案:

答案 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");