例如,在这样的文字:

  

Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。 NUNC欧盟特力德维尔NUNC的Pretium lacinia。 PROIN SED LOREM。信用评级机构的sed存有。 NUNC一个自由人QUIS risus sollicitudin imperdiet。

我想后 'ipsum的' 到字相匹配。

有帮助吗?

解决方案

这听起来像lookbehinds一份工作,但你应该知道,并非所有的正则表达式的口味支持他们。在您的示例:

(?<=\bipsum\s)(\w+)

这将匹配的下面“文字”作为一个整体字后跟一个空格字母字符的任何序列。它的不可以匹配“文字”本身,你不需要担心的,例如案件重新插入替代品。

正如我说,虽然,一些香料(JavaScript中,例如)不支持回顾后在所有。许多人(大多数,其实)仅支持“固定宽度” lookbehinds - 所以你可以用这个例子而不是任何的重复操作符。 (换句话说,(?<=\b\w+\s+)(\w+) 不会的工作。)

其他提示

其他的一些响应者建议使用不依赖于lookbehinds一个正则表达式,但我认为是需要一个完整的工作示例传达出点。这个想法是,你以正常的方式在整个序列(“文字”,加上一个字)匹配,然后使用捕获组到您感兴趣的部分隔离开来。例如:

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));
}

请注意,这两个打印“悲”和“Nunc公司”。要做到这一点与回顾后的版本,你就必须做喜欢的事的hackish:

Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");

这是在Java中,这需要回顾后具有明显的最大长度。有些味道甚至没有那么多的灵活性,当然,有些根本就不支持lookbehinds。

然而,最大的问题的人似乎在他们的例子是具有不与lookbehinds,但单词边界。无论大卫坎普和CK似乎期望\b到下面的“M”空格字符匹配,但它不支持;它的“m”和所述空间之间的位置(或边界)的匹配。

这是一个常见的错误,一个我甚至看到了一些书籍和教程反复,但这个词边界构造,\b,永远不匹配任何字符。这是一个零宽度断言,像lookarounds和锚(^$\z等),以及它相匹配的是,或者由一个字字符之前和后面没有一个,或随后的单词的字符和位置不是由一个之前。

存有\ B(\ W *)

使用javascript可以使用(?=ipsum.*?(\w+))

这会得到一个第二次出现,以及(Nunc)中

存有\ B(。*)\ B'/ P>

编辑: 虽然取决于您正则表达式的实现,这可能是饿了,找到后存有

所有单词
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top