2017-04-13 5 views
1

Ich habe einen Text-String wie folgt:Suche beginnen und Ende Anführungszeichen innerhalb eines Strings

The nice man said "How's things today" and I replied "All is good thanks". 

Ich mag die doppelten Anführungszeichen für fontawesome Symbole ersetzen. Wenn ich eine String-Ersetzung auf doppelte Qoutes mache, funktioniert es gut. Aber wie erwartet, gibt mir das nur eine generische linke Anführungszeichen für jedes doppelte Anführungszeichen in der Zeichenfolge.

Mein aktueller Code:

$str = The nice man said "How's things today" and I replied "All is good thanks". 

$str = str_replace('"', '<i class="fa fa-quote-left" aria-hidden="true"></i>'); 

Ausgänge:

The nice man said <i class="fa fa-quote-left" aria-hidden="true"></i>How's things today<i class="fa fa-quote-left" aria-hidden="true"></i> and I replied <i class="fa fa-quote-left" aria-hidden="true"></i>All is good thanks<i class="fa fa-quote-left" aria-hidden="true"></i>. 

gewünschte Ausgabe:

The nice man said <i class="fa fa-quote-left" aria-hidden="true"></i>How's things today<i class="fa fa-quote-right" aria-hidden="true"></i> and I replied <i class="fa fa-quote-left" aria-hidden="true"></i>All is good thanks<i class="fa fa-quote-right" aria-hidden="true"></i>. 


Ausgabe: http://jsfiddle.net/JfGVE/1975/

+1

OP beschäftigt sich in erster Linie nicht mit HTML. @Jens – revo

+0

Ihre Ausgabe und erwartet werden gleich aussehen? –

+1

@SahilGulati - Sie nicht. Der erste hat "fa-quote-left" für alle Anführungszeichen, während der letzte "fa-quote-right" für alle richtigen Anführungszeichen hat. –

Antwort

4

Wenn Sie sicher, dass doppelte Anführungszeichen sind gibt es als das gleiche wie das, was wir in der Zeichenkette sehen (symmetrisch, entging kein doppeltes Anführungszeichen innen) dann ein regulärer Ausdruck die Arbeit machen wird:

echo preg_replace('~(")([^"]+)(")~', '<i class="fa fa-quote-left" aria-hidden="true"></i>\\2<i class="fa fa-quote-right" aria-hidden="true"></i>', $str); 

Live demo

+1

Vielen Dank. Können Sie bitte erklären, was das Muster genau macht? – steve

+1

Die Regex versucht, drei Teile aus der Eingabezeichenfolge zu finden und zu erfassen: 1- ein doppeltes Anführungszeichen (öffnend) 2- alles außer einem doppelten Anführungszeichen 3- ein doppeltes Anführungszeichen (Schließen). Dann ersetzt das Ersatzargument 'preg_replace()' die erste und dritte erfassende Gruppe und lässt den mittleren Teil intakt. – revo

Verwandte Themen