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?
Special Regex Characters: These characters have special meaning in regex (to be discussed below): . , + , * , ? , ^ , $ , ( , ) , [ , ] , { , } , | , \ . Escape Sequences (\char): To match a character having special meaning in regex, you need to use a escape sequence prefix with a backslash ( \ ).
$ means "Match the end of the string" (the position after the last character in the string).
These are called anchor characters: If a caret ( ^ ) is at the beginning of the entire regular expression, it matches the beginning of a line. If a dollar sign ( $ ) is at the end of the entire regular expression, it matches the end of a line.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With