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_match
zum Abrufen der ersten und preg_match_all
zum 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 \(\K
Teil 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 .