2017-01-19 5 views
3

ich diesen preg_replaceWarum preg_replace dieses Ergebnis geben

echo preg_replace('/.*/','r','string'); 

https://eval.in/720293

bin mit erwarte ich es ausgeben sollte r

Aber der Ausgang ist

rr

Kann jemand erklären, warum es zwei r Echo?

+2

Da '. *' * Auch * entspricht dem leeren Zeichenfolge. (Irgendwo einmal.) – mario

+2

preg findet "abcd", was zu '. *' Passt. schaut dann weiter, findet die leere Zeichenkette, die ebenfalls ". *" passt, da der Sternoperator "Null oder mehr" bedeutet. also hat es zwei Übereinstimmungen. Willst du die leere Zeichenfolge nicht? Verwenden Sie '. +' - der Plus-Operator, der "einmal oder mehr" bedeutet. –

+0

thankksssss ich habe es – beginner

Antwort

2

Da preg_replace globale Flag verwendet und .* zuerst die ganze Zeichenfolge und dann die leere Zeichenfolge am Ende und daher sehen Sie zweimal die r. Wenn Sie nur die Zeichenfolge ersetzen möchten, müssen Sie expliziter mit dem Muster sein. Als Beispiel können Sie folgende ^.* verwenden. Andere Option ist das Hinzufügen von Grenzwert zu preg_replace, um nur die erste Übereinstimmung zu ersetzen: preg_replace ('/.*/', 'r', 'string', 1)

Verwandte Themen