Регулярное выражение PHP для соответствия строкам, начинающимся со специального символа
У меня есть текстовый файл с некоторым значением конфигурации. Там комментарий начинается С#
Я пытаюсь найти шаблон регулярного выражения, который обнаружит все строки, начинающиеся С#
Итак, файл образца:
1st line
#test line this
line #new line
aaaa #aaaa
bbbbbbbbbbb#
cccccccccccc
#ddddddddd
Я хочу найти
#test line this
#ddddddddd
потому что только эти две строки начинаются С#
Я попробовал следующий код:
preg_match_all("/^#(.*)$/siU",$text,$m);
var_dump($m);
Но он всегда выводит пустой массив. Кто может помочь?
Ответы
Ответ 1
Вы забыли многострочный модификатор (и вам не следует использовать модификатор Singleline, также не нужен модификатор без учета регистра, а также модификатор ungreedy):
preg_match_all("/^#(.*)$/m",$text,$m);
Объяснение:
-
/m
позволяет ^
и $
соответствовать в начале/конце строк, а не только всей строке (которая вам нужна здесь)
-
/s
позволяет точке совпадать с новыми строками (которые вы здесь не хотите)
-
/i
включает нечувствительное к регистру сопоставление (которое вам здесь не нужно)
-
/U
включает неровное соответствие (что здесь не имеет значения из-за anchors)
A Демо-версия PHP:
$text = "1st line\n#test line this \nline #new line\naaaa #aaaa\nbbbbbbbbbbb#\ncccccccccccc\n#ddddddddd";
preg_match_all("/^#(.*)$/m",$text,$m);
print_r($m[0]);
Результаты:
[0] => #test line this
[1] => #ddddddddd
Ответ 2
Вы можете просто написать:
preg_match_all('~^#.*~m', $text, $m);
поскольку квантификатор по умолчанию жадный и точка по умолчанию не соответствует новым строкам, вы получите то, что хотите.