Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

regex - PHP regular expression to match lines starting with a special character

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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
#test line this 
line #new line
aaaa #aaaa
bbbbbbbbbbb#
cccccccccccc
#ddddddddd"; 
preg_match_all("/^#(.*)$/m",$text,$m);
print_r($m[0]);

Results:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...