Регулярное выражение 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); 

Но он всегда выводит пустой массив. Кто-нибудь может помочь?

Вы забыли многострочный модификатор (и вы не должны использовать модификатор 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); 

поскольку квантификатор по умолчанию жадный и точка по умолчанию не соответствует новым строкам, вы получите то, что хотите.