2013-08-03 14 views
10

Ich habe eine Textdatei mit einigen Konfigurationswert. Es gibt einen Kommentar beginnt mit einem # Ich versuche, einen regulären Ausdruck zu finden, der die Linien alle werden herausfinden, dassPHP regulären Ausdruck, um Zeilen mit einem Sonderzeichen übereinstimmen

Also mit einem # beginnen, Beispieldatei:

1st line 
#test line this 
line #new line 
aaaa #aaaa 
bbbbbbbbbbb# 
cccccccccccc 
#ddddddddd 

Ich möchte

finden
#test line this 
#ddddddddd 

weil nur diese beiden Zeilen beginnen mit # habe ich versucht, den folgenden Code:

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

Aber es gibt immer leere Array aus. Jeder kann helfen?

Antwort

13

Sie haben vergessen, den mehrzeiligen Modifikator (und Sie sollten nicht die Einleiner Modifikator, auch die Groß- und Kleinschreibung Modifikator unnötig sowie die ungreedy Modifikator):

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

Erläuterung:

  • /m ermöglicht die ^ und $ am Anfang/Ende übereinstimmen von Linien, nicht nur die gesamte Zeichenfolge (die Sie hier brauchen)
  • /s ermöglicht es dem Punkt Zeilenumbrüche (die Sie nicht wollen, hier)
  • /i schaltet Groß- und Kleinschreibung passend zu entsprechen (die Sie nicht brauchen hier)
  • /U schaltet ungreedy Matching (die wegen der anchors) keinen Unterschied machen

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

Ergebnisse:

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

da die quantifier standardmäßig aktiviert und der Punkt standardmäßig nicht übereinstimmt newlines gierig ist, werden Sie bekommen, was Sie wollen:

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

vielen dank..es löste mein Problem :) –

2

Sie einfach schreiben können.

Verwandte Themen