Niektóre z innych reagujących sugerowali przy użyciu wyrażenia regularnego, które nie zależą od lookbehinds, ale 1 myśleć kompletny, przykład praca jest potrzebna, aby uzyskać punkt w poprzek. Chodzi o to, że można dopasować całą sekwencję („badań” plus następne słowo) w normalny sposób, a następnie użyć grupę przechwytywania wyizolować część, która Cię interesuje. Na przykład,
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));
}
Zauważ, że ten drukuje zarówno „inteligentny” i „teraz”. Aby to zrobić z wersją lookbehind, trzeba by zrobić coś takiego hackish:
Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");
to Java, który wymaga lookbehind mają oczywisty maksymalną długość. Niektóre smaki nie mają nawet to dużą elastyczność i oczywiście, niektóre nie obsługują lookbehinds w ogóle.
jednak problemowe największe ludzie wydają się mieć w swoich przykładach nie jest z lookbehinds, ale z granicami słownych. Zarówno David Kemp i CK wydają się spodziewać \b
dopasować znak spacji po „M”, ale tak nie jest; dopasowuje pozycja (ramce) pomiędzy „m” i przestrzeni.
Jest to częsty błąd, jeden 1've widział nawet powtarzane w kilku książek i samouczki, ale konstrukt słowo granica, \b
nie odpowiada żadnych znaków. Jest to o zerowej szerokości twierdzenie, jak lookarounds i kotew (^
, $
, \z
, etc.), a co pasuje to stanowisko, które jest albo poprzedzoną znakiem słowa i nie następuje po drugim, lub po nim znaku słownego i nie poprzedzone jednym.
bicie mnie też :) – annakata
Lookbehinds wydają się być dość ograniczone, jeśli chodzi o używanie symboli wieloznacznych. – cletus
Lookbehinds może nie być nawet konieczne tutaj. W zależności od tego, co "chcę dopasować" w pytaniu, patrz rozwiązanie Davida Kempa. – user55400