2017-02-07 3 views
0

Ich versuche , functionName("MATCH2"); und ... functionName ('MATCH_X') ; zu finden und extrahieren MATCH_XXX durch den folgenden Text.php preg_match_all Funktionsparameter in PHP-Datei einer Funktion

Der Text: Einige text functionName ('MATCH_1'); und anderer Text functionName ("MATCH_2"); und viele andere Texte.

Oder viele weitere in der nächsten Zeile functionName ('MATCH_X'); ... mehr Text.

Ich möchte MATCH_1, MATCH2 und MATCH_X

Mein Versuch bekommen:

<?php 
preg_match_all('#functionName\s*\(\s*(\'|")(.*)(\'|")\s*\)\s*;#im', $content,$matches); 

Aber meine RegEx nicht machen, was ich will. Können Sie mir bitte erklären, wie die RegEx aussehen muss. Und warum er so arbeitet.

Grüße raiserle

+0

Können Sie '$ content' in einem reproduzierbaren Format bereitstellen? Ohne '^' oder '$' ist der 'm' Modifikator unbrauchbar. – chris85

+2

Ersetzen Sie '. *' Durch '. *?' Oder vielleicht auch '[^" \ '] * ' –

+0

@ chris85: Warum ist das' 'm'' unbrauchbar? – raiserle

Antwort

1

versuchen diese

$content = "The text: Some text functionName('MATCH_1'); and other text functionName(\"MATCH_2\") ; and many another text. Or many more in next line functionName('MATCH_X'); ... more text."; 

preg_match_all('#functionName\s*\(\s*(\'|")(.*?)(\'|")\s*\)\s*;#im', $content,$matches); 

var_dump($matches); 

und dann sollten Sie haben, was Sie in $matches[2] wollen.

was ich geändert habe, ist, dass ich die ? nach dem .* Teil der Regex hinzugefügt habe, so dass es nicht gierig ist (entspricht der kürzest möglichen Zeichenfolge anstelle der längsten Übereinstimmung). Dies macht es weniger leistungsfähig. Siehe: here für eine Erklärung warum und detailliertere Erklärung.

+0

Danke. '' '' 'nach' '. *' 'funktioniert genau. Der Link ist perfekt. ' 'MATCH_1 ');?> functionName (' MATCH2'' ist jetzt korrekt. – raiserle