Модификатор Regex, не работает? - PullRequest
0 голосов
/ 18 ноября 2009

Хорошо, я новичок в регулярных выражениях, и я использую этот сайт для своего учебника по регулярным выражениям:

Вопрос: с помощью модификатора 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.*/

?>

Ответы [ 2 ]

6 голосов
/ 18 ноября 2009

Вместо этого используйте preg_match_all(), который не останавливается после первого матча.

preg_match() возвращает количество совпадений с шаблоном. Это будет либо 0 раз (без совпадений), либо 1 раз, потому что preg_match () остановит поиск после первого совпадения. preg_match_all() наоборот будет продолжаться, пока не достигнет конца субъекта. preg_match() возвращает FALSE, если произошла ошибка. - PHP.net

Однако код будет выводить только 1, потому что соответствует регулярному выражению "sex.at.noon", а не разрыву строки.

1 голос
/ 18 ноября 2009

preg_match () будет возвращать только 0 или 1, потому что останавливается после первого совпадения паттерна. Если вы используете preg_match_all () , он все равно вернет 1, потому что ваш шаблон соответствует только один раз в строке, с которой вы сопоставляете.

Если вы хотите количество новых строк через регулярное выражение:

echo preg_match_all("/\n/m", $string, $matches);

Или через строковые функции:

echo substr_count($string, "\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...