2016-08-04 18 views
-2

Ich habe Stücke von Text, die ich entfernen muss, oder einfach ersetzen mit "".Suchen/Ersetzen von Text mit Regexp

Es folgt ein Auszug des Textes

  1. $prep->bindValue(':PYOtherExpensesAmt',$summaryData['*PYOtherExpensesAmt*'])?$row['PYOtherExpensesAmt']:''));

  2. $prep->bindValue(':CYOtherExpensesAmt',$summaryData['*CYOtherExpensesAmt*'])?$row['CYOtherExpensesAmt']:''));

Ich brauche Textteile mit ?$row und endend mit )) beginnen zu ersetzen.

So Beispiel der erste Ersatz wäre:

  • $prep->bindValue(':PYOtherExpensesAmt',$summaryData['PYOtherExpensesAmt']);

Ich habe die folgende regexp versucht:

([?][$row], [))])

Irgendwelche Tipps, wie man diese entfernen bekommen diese Textblöcke als regulärer Ausdruck?

Antwort

3

Hier ist ein regulärer Ausdruck, Ihr Muster übereinstimmen:

\?\$row.*?\)\) 

Erläuterung: Der Backslash (\) wird das Zeichen vor ihm entkommen, so dass der Motor buchstäblich dieses Zeichen suchen. Dies wird benötigt, da ?, $ und ) in der regexp-Syntax bereits eine besondere Bedeutung haben. Schließlich bedeutet der Teil .*?, dass es null oder mehr (*) Instanzen eines beliebigen Zeichens (.) in einer "faulen" Art und Weise (?) abgleicht und somit bei der ersten )) stoppt. Eine ausgezeichnete Ressource zum Erlernen der Regex-Syntax: regular-expressions.info

Dann sollten Sie, wie Sie sich denken, alle Übereinstimmungen durch eine leere Zeichenfolge ersetzen, um sie zu entfernen.