Question: 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?

Answer: 
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](http://www.regular-expressions.info/anchors.html))

A [PHP code demo](https://ideone.com/lWNnoK):

```
$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

```
You can simply write:

```
preg_match_all('~^#.*~m', $text, $m);

```

since the quantifier is greedy by default and the dot doesn't match newlines by default, you will obtain what you want.