Движок Regex не имеет глобального фильтра и не принимает флаг - PullRequest
0 голосов
/ 27 апреля 2019

Я могу проверить "глобальный" на этом сайте, который я использую для тестирования. Я снял глобальный и попытался добавить / g к моему регулярному выражению, и это не работает. Я пытаюсь добавить его вручную, потому что в реальной среде движок регулярных выражений не имеет глобального фильтра.

Я пробовал / г и начало и конец регулярных выражений и отключение автоматического фильтра

(?=(Booked|Cancelled|Reschedule))(?<status>\1)|(?<acct>M\d{9})|(? 
=Procedure Date:\s*(?<m>\d{2})\/(?<d>\d{2})\/(?<y>\d{2}))

если я удалю модификатор с веб-сайта или попытаюсь добавить его самостоятельно, он игнорирует совпадения.

https://regex101.com/r/igjCuo/48

1 Ответ

0 голосов
/ 29 апреля 2019

Я не совсем уверен, что вы спрашиваете, но в PHP вы можете использовать preg_match_all.Он даже работает с символами новой строки, поэтому вам не нужно заменять их на {newline}.

Предполагая, что регулярное выражение выполнено:

<?php
$file = $argv[1];
$rgx="/(?=(Booked|Cancelled|Reschedule))(?<status>\1)|(?<acct>M\d{9})|(?=Procedure Date:\s*(?<m>\d{2})\/(?<d>\d{2})\/(?<y>\d{2}))/";
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);
preg_match_all($rgx, $data, $array);
var_dump($array);

Я сохранил код как test.php и подтвердил это следующим образом.

$ php test.php txt_newline.txt > test.a
$ php test.php txt_no_newline.txt > test.b
$ md5sum test.a test.b 
5880b9977830066f5b8bd0bea41ebb0f  test.a
5880b9977830066f5b8bd0bea41ebb0f  test.b

Надеюсь, это поможет. Вот полное руководство по preg_match_all.

...