Einige der anderen Responder vorgeschlagen haben, einen regulären Ausdruck verwenden, das nicht auf Lookbehinds abhängt, aber 1 denken, ein komplettes, arbeitet beispielsweise benötigt, um den Punkt zu kommen über. Die Idee ist, dass Sie die gesamte Sequenz übereinstimmen („Forschung“ plus das nächste Wort) in der normalen Art und Weise, dann eine Erfassungsgruppe verwenden, das Teil zu isolieren, das Sie interessiert. Zum Beispiel
String s = "Lorem ipsum dolor sit amet, consectetur " +
"adipiscing elit. Nunc eu tellus vel nunc pretium " +
"lacinia. Proin sed lorem. Cras sed ipsum. Nunc " +
"a libero quis risus sollicitudin imperdiet.";
Pattern p = Pattern.compile("ipsum\\W+(\\w+)");
Matcher m = p.matcher(s);
while (m.find())
{
System.out.println(m.group(1));
}
Beachten Sie, dass diese druckt sowohl "smart" und "jetzt". Um das zu tun mit der Lookbehind-Version, würden Sie so etwas wie hackish tun:
Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");
Das ist Java, die die Lookbehind erfordert haben eine offensichtliche maximale Länge. Einige Aromen haben nicht einmal so viel Flexibilität und natürlich einige nicht unterstützen Lookbehinds überhaupt.
scheinen jedoch die größte Problem der Menschen in ihren Beispielen zu haben ist nicht mit Lookbehinds, sondern mit Wortgrenzen. Sowohl David Kemp und CK scheinen \b
zu erwarten, dass die Leerzeichen nach dem ‚M‘ passen, aber es funktioniert nicht; sie stimmt mit der Position (oder Grenze) zwischen dem ‚m‘ und dem Raum.
Es ist ein weit verbreiteter Irrtum, eine 1've sogar in ein paar Bücher und Tutorials wiederholt gesehen, aber das Wort-Grenze Konstrukt, \b
paßt nie irgendwelche Zeichen. Es ist eine Null-Breite Behauptung, wie lookarounds und Anker (^
, $
, \z
, etc.), und was es übereinstimmt ist eine Position, die entweder von einem Wortzeichen vorangestellt ist und nicht von einer oder gefolgt von einem Wortzeichen gefolgt und nicht von einer voraus.
schlag mich auch :) – annakata
Lookbehinds neigen dazu, ziemlich begrenzt zu sein, wenn es darum geht, Wildcards zu verwenden. – cletus
Lookbehinds sind hier vielleicht gar nicht nötig. Je nachdem, auf was "Ich möchte übereinstimmen" in der Frage verweist, siehe David Kemps Lösung. – user55400