Некоторые из других респондентов предложили использовать регулярное выражение, которое не зависит от внешнего вида, но я думаю, что нужен полный, рабочий пример, чтобы понять суть. Идея состоит в том, что вы сопоставляете всю последовательность («ipsum» плюс следующее слово) обычным образом, а затем используете группу захвата, чтобы выделить интересующую вас часть. Например:
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));
}
Обратите внимание, что это печатает и "dolor" и "Nunc". Чтобы сделать это с версией lookbehind, вам нужно сделать что-то хакерское, например:
Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");
Это в Java, которая требует, чтобы внешний вид имел очевидную максимальную длину. Некоторые ароматы не обладают такой большой гибкостью, и, конечно, некоторые вообще не поддерживают внешний вид.
Однако самая большая проблема, с которой люди сталкиваются в своих примерах, это не взгляды, а границы слов. Дэвид Кемп и ck, похоже, ожидают, что \b
будет соответствовать пробелу после «m», но это не так; это соответствует позиции (или границе) между 'm' и пробелом.
Это распространенная ошибка, которую я даже встречал в нескольких книгах и руководствах, но конструкция границы слова \b
никогда не совпадает ни с одним символом. Это утверждение нулевой ширины, например, обходные пути и якоря (^
, $
, \z
и т. Д.), И ему соответствует позиция, которой предшествует символ слова, а не один, или сопровождаемый символом слова и не предшествующий одному.