У меня есть текстовый файл с некоторым значением конфигурации. Там комментарий начинается с # Я пытаюсь найти шаблон регулярного выражения, который обнаружит все строки, начинающиеся с #
Итак, образец файла:
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); 
поскольку квантификатор по умолчанию жадный и точка по умолчанию не соответствует новым строкам, вы получите то, что хотите.