У меня есть текстовый файл с некоторым значением конфигурации. Там комментарий начинается с # Я пытаюсь найти шаблон регулярного выражения, который обнаружит все строки, начинающиеся с #
Итак, образец файла:
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);
Но он всегда выводит пустой массив. Кто-нибудь может помочь?
Вы забыли многострочный модификатор (и вы не должны использовать модификатор Singleline, также не нужен модификатор без учета регистра, а также модификатор ungreedy):
preg_match_all("/^#(.*)$/m",$text,$m);
Объяснение:
/m
позволяет совпадениям ^
и $
в начале / конце строк, а не только всей строке (которая вам нужна здесь) /s
позволяет точке соответствовать новым строкам (которые вы здесь не хотите) /i
включает нечувствительное к регистру сопоставление (которое вам здесь не нужно) /U
включает неровное совпадение (что здесь не имеет значения из-за якорей ) Демоверсия 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
Вы можете просто написать:
preg_match_all('~^#.*~m', $text, $m);
поскольку квантификатор по умолчанию жадный и точка по умолчанию не соответствует новым строкам, вы получите то, что хотите.