2009-08-03 19 views
1

Ich muss die Elemente ändern, die einige Inhalte in einer Zeichenfolge umgeben, den Inhalt belassen, wie es ist. Ich mache es mit einem regulären Ausdruck, aber wenn ich den Positionsparameter ($ 1) ersetze, wird nur die erste Übereinstimmung verwendet.regulärer Ausdruck: Suchen und ersetzen Sie jede Übereinstimmung

Zum Beispiel, wenn ich diese Zeichenfolge haben:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>. 

Ich will es ändern:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>. 

Aber ich kann nur erhalten:

<strong>I want<strong> to change <strong>this<strong> text, 
but <strong>I can't<strong>. <strong>Why?<strong>. 

I‘ m unter Verwendung des folgenden Regex:

(global, und es mit „<$1>“ ersetzt) ​​denke ich, das Problem ist, kann ich nicht sagen, wie viele Spiele gefunden werden, und wie man jeden Bezug zu nehmen. Vielleicht hätte ich in Perl $ + verwenden können, aber das funktioniert nicht. Ich mache das mit dem Regex-Modul von Yahoo Pipes. Es sollte PHP-Implementierungen sehr ähnlich sein, afaik.

Wie kann ich jedes Match separat in Yahoo Pipes verwenden?

Antwort

2

Es könnte einfacher sein, die &lt; und die &gt; unabhängig voneinander zu ersetzen. Auf diese Weise wird es zu einem einfachen Fund-Replace, der keine Rückverweise benötigt.

+0

brauche ich für die zwei Durchgänge zu tun? eine, um die < s und eine andere für die > s zu ändern? (Danke!) –

+1

Es wären zwei Durchgänge. Führen Sie einfach eine Zeichenfolge ersetzen auf <und> und dann injizieren Sie Ihre neue Zeichenfolge in die Webseite. – mlevit

+0

Ich bin nicht vertraut mit Yahoo Pipes, aber die meisten regulären Ausdruck-Engines haben alle Funktionen irgendeiner Art zu ersetzen. Sie müssten 'replaceAll (" < "," <")' und 'replaceAll (" > ","> ")', also ja, zwei Operationen wären erforderlich. –

Verwandte Themen