2017-12-23 7 views
1

Bitte, ich brauche etwas Hilfe, um die richtige Regex zu erstellen.regex zu was auch immer zwischen

Ich möchte ") was zwischen Decode(" erkennen mir diese Ausgabe 2%65%66%_WHATEVER_8%74%74

ich viel versucht zu geben, aber nichts richtig funktioniert mir die genaue Ausgabe zu geben, die ich will.

Mein Code:

$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 = '/Decode("([^*]+)")/i'; 
preg_match_all($pattern, $string, $matches); 

print_r($matches[1]); 

Antwort

1

Wie in den Kommentaren erwähnt, könnten Sie

Decode\("([^"]+)"\) 

verwenden und die erste Gruppe nehmen, sehen a demo on regex101.com.


Als PHP Demo:

<?php 

$data = <<<DATA 
<script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script> 
DATA; 

$regex = '~Decode\("([^"]+)"\)~'; 

if (preg_match_all($regex, $data, $matches)) { 
    print_r($matches[1]); 
} 

?> 
1

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 
) 
Verwandte Themen