Die bereits veröffentlichten Regex-Lösungen - \((.*?)\)und \(([^\)]+)\)- geben nicht die innersten Zeichenfolgen zwischen einer offenen und einer geschlossenen Klammer zurück. Wenn ein String ist Text (abc(xyz 123)sie beide zurückgeben ein (abc(xyz 123)als Ganzes Spiel, und nicht (xyz 123).
Das Muster, das Teilzeichenfolgen ( preg_matchzum Abrufen der ersten und preg_match_allzum Abrufen aller Vorkommen mit) in Klammern ohne andere offene und geschlossene Klammern dazwischen entspricht, lautet, wenn die Übereinstimmung Klammern enthalten soll:
\([^()]*\)
Oder Sie möchten Werte ohne Klammern erhalten:
\(([^()]*)\)
\(\K[^()]*(?=\))
(?<=\()[^()]*(?=\))
Ersetzen Sie *durch, +wenn zwischen (und mindestens 1 Zeichen liegen muss ).
Details :
\( - eine öffnende runde Klammer (muss maskiert werden, um eine wörtliche Klammer zu kennzeichnen, da sie außerhalb einer Zeichenklasse verwendet wird)
[^()]*- null oder mehr Zeichen , die nicht (und )(beachten Sie diese (und )müssen nicht als im Inneren innerhalb einer Zeichenklasse entronnen sein, (und )nicht verwendet werden kann , eine Gruppierung und werden behandelt , als wörtliche Klammern angeben)
\) - eine schließende runde Klammer (muss maskiert werden, um eine wörtliche Klammer zu kennzeichnen, da sie außerhalb einer Zeichenklasse verwendet wird).
Der \(\KTeil in einem alternativen regulären Ausdruck stimmt (mit dem \KÜbereinstimmungswert überein und lässt ihn aus (mit dem Operator zum Zurücksetzen der Übereinstimmung). (?<=\()ist ein positives Lookbehind, bei dem a (unmittelbar links vom aktuellen Speicherort angezeigt werden muss , das (jedoch nicht zum Übereinstimmungswert hinzugefügt wird, da Lookbehind-Muster (Lookaround-Muster) nicht verbraucht werden. (?=\()ist ein positiver Lookahead, für den ein )Zeichen unmittelbar rechts vom aktuellen Standort angezeigt werden muss .
PHP-Code :
$fullString = 'ignore everything except this (text) and (that (text here))';
if (preg_match_all('~\(([^()]*)\)~', $fullString, $matches)) {
print_r($matches[0]);
print_r($matches[1]);
}
Ausgabe:
Array ( [0] => (text) [1] => (text here) )
Array ( [0] => text [1] => text here )
s($fullString)->between("(", ")")hilfreiche Informationen in dieser eigenständigen Bibliothek .