PHP regular expression to match lines starting with a special character

php, regex

Solution

You forgot the multiline modifier (and you should not use the singleline modifier; also the case-insensitive modifier is unnecessary as well as the ungreedy modifier):

preg_match_all("/^#(.*)$/m",$text,$m);

Explanation:

- `/m` allows the `^` and `$` to match at the start/end of lines, not just the entire string (which you need here)

- `/s` allows the dot to match newlines (which you don't want here)

- `/i` turns on case-insensitive matching (which you don't need here)

- `/U` turns on ungreedy matching (which doesn't make a difference here because of the anchors)

A PHP code demo:

$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]);

Results:

[0] => #test line this 
[1] => #ddddddddd

Problem

I have a text file with some configuration value. There a comment starts with a # I am trying to find a regular expression pattern that will find out all the lines that start with a # So, sample file: ``` 1st line #test line this line #new line aaaa #aaaa bbbbbbbbbbb# cccccccccccc #ddddddddd ``` I want to find ``` #test line this #ddddddddd ``` because only these two lines start with # I tried the following code: ``` preg_match_all("/^#(.*)$/siU",$text,$m); var_dump($m); ``` But it always outputs empty array. Anyone can help?

Original source