Basierend auf Ihren Input-String, müssen Sie nur die folgenden Muster:
/\("\K[^"]+/
Diese kurze Muster angemessen ist/genau, weil Ihre gezielte doppelten Anführungszeichen Teilzeichenfolge eindeutig ist identifiziert durch die vorhergehenden (
.
preg_match_all()
liefert die gewünschten Teilstrings in der Fullstring-Übereinstimmung ([0]
). Dies ist schneller und weniger Blähungen des Ausgabe-Arrays als mit einer Erfassungsgruppe.
\(
bedeutet "eine literale öffnende Klammer". Ohne den Backslash wird Regex Ihre Bedeutung falsch interpretieren und betrachten Sie die (
zu bedeuten: "fangen abfangen von diesem Punkt aus".
\K
wird die Vollstring-Übereinstimmung neu starten.
wird gierig mit einem oder mehreren nicht doppelten Anführungszeichen übereinstimmen und kurz vor dem Auftreten eines doppelten Zitats stoppen. Dies ist ein negated character class
. Diese werden häufig verwendet, um die Effizienz zu verbessern und gleichzeitig die Genauigkeit zu erhalten.
Code: (Demo: https://3v4l.org/UmaaC)
$string = '
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="green"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>';
$pattern = '/\("\K[^"]+/';
preg_match_all($pattern, $string, $matches);
print_r($matches[0]);
Ausgang:
Array
(
[0] => 2%65%66%_WHATEVER_8%74%74
[1] => 2%65%66%_WHATEVER_8%74%74
[2] => 2%65%66%_WHATEVER_8%74%74
)