472 Stimmen

Regulärer Ausdruck, um eine Zeichenkette zu finden, die zwischen zwei Zeichen eingeschlossen ist, wobei die Begrenzungszeichen AUSGESCHLOSSEN werden

Ich muss aus einer Zeichenkette einen Satz von Zeichen extrahieren, die zwischen zwei Begrenzungszeichen enthalten sind, ohne die Begrenzungszeichen selbst zurückzugeben.

Ein einfaches Beispiel soll dies verdeutlichen:

Ziel : Extrahiert die Teilzeichenkette zwischen eckigen Klammern, ohne die Klammern selbst zurückzugeben.

Basiskette : This is a test string [more or less]

Wenn ich z. B. die folgende Regelung verwende.

\\\[.\*?\\\]

Das Spiel ist [more or less] . Ich brauche nur zu bekommen more or less (ohne die Klammern).

Ist es möglich, dies zu tun?

9voto

Luis Febro Punkte 1358

Die aktuellste Lösung

Wenn Sie Javascript verwenden, ist die beste Lösung, die ich gefunden habe, die Verwendung von match anstelle von exec Methode. Anschließend werden die Übereinstimmungen iteriert und die Begrenzungszeichen mit dem Ergebnis der ersten Gruppe entfernt, indem $1

const text = "This is a test string [more or less], [more] and [less]";
const regex = /\[(.*?)\]/gi;
const resultMatchGroup = text.match(regex); // [ '[more or less]', '[more]', '[less]' ]
const desiredRes = resultMatchGroup.map(match => match.replace(regex, "$1"))
console.log("desiredRes", desiredRes); // [ 'more or less', 'more', 'less' ]

Wie Sie sehen können, ist dies auch für mehrere Trennzeichen im Text nützlich

8voto

powtac Punkte 39079

PHP:

$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);

6voto

null Punkte 71

Dieser funktioniert speziell für den Parser für reguläre Ausdrücke von Javascript /[^[\]]+(?=])/g

Führen Sie einfach Folgendes in der Konsole aus

var regex = /[^[\]]+(?=])/g;
var str = "This is a test string [more or less]";
var match = regex.exec(str);
match;

5voto

Cătălin Rădoi Punkte 1623

Um auch die [] zu entfernen, verwenden Sie:

\[.+\]

4voto

A. Jesús Punkte 83

Ich hatte das gleiche Problem bei der Verwendung von Regex mit Bash-Skripten. Ich habe eine zweistufige Lösung verwendet, bei der Pipes mit grep -o angewendet werden

 '\[(.*?)\]'  

zuerst, dann

'\b.*\b'

Offensichtlich nicht so effizient wie die anderen Antworten, aber eine Alternative.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X