32

例如,在此文本中:

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Nunc eu Tellus vel nunc pretium lacinia。Proin sed lorem。疯狂的 ipsum。Nunc a libero quis risus sollicitudin imperdiet。

我想匹配“ipsum”之后的单词。

4

7 回答 7

47

这听起来像是一项寻找后向的工作,尽管您应该知道并非所有的正则表达式都支持它们。在您的示例中:

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

这将匹配“ipsum”后面的任何字母字符序列作为一个完整的单词,然后是一个空格。它与“ipsum”本身匹配,您无需担心在替换的情况下重新插入它。

不过,正如我所说,某些风格(例如 JavaScript)根本不支持后向查看。许多其他人(实际上大多数人)只支持“固定宽度”的lookbehinds——所以你可以使用这个例子,但不能使用任何重复运算符。(换句话说,(?<=\b\w+\s+)(\w+) 行不通。)

于 2009-02-13T15:01:49.067 回答
6

其他一些响应者建议使用不依赖于lookbehinds 的正则表达式,但我认为需要一个完整的工作示例来理解这一点。这个想法是您以正常方式匹配整个序列(“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 中,它要求后视有一个明显的最大长度。有些风格甚至没有那么大的灵活性,当然,有些风格根本不支持lookbehinds。

然而,人们在他们的例子中似乎遇到的最大问题不是后视,而是单词边界。David Kemp 和 ck 似乎都希望\b匹配 'm' 后面的空格字符,但事实并非如此;它匹配“m”和空格 之间的位置(或边界) 。

这是一个常见的错误,我什至在几本书和教程中都看到过这个错误,但是单词边界结构\b, 永远不会匹配任何字符。它是一个零宽度断言,如环视和锚点(^$\z等),它匹配的是一个位置,该位置要么前面有一个单词字符,后面没有一个,或者后面有一个单词字符,前面没有一。

于 2009-02-13T20:49:29.373 回答
2

ipsum\b(\w*)

于 2009-02-13T14:54:19.740 回答
1

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

这也将出现第二次(Nunc)

于 2017-07-12T02:41:01.030 回答
0
(?<=\bipsum\s|\bipsum\.\s)(\w+)

/(?<=\bipsum\s|\bipsum\.\s)(\w+)/gm Positive Lookbehind (?<=\bipsum\s|\bipsum\.\s) 断言下面的 Regex 匹配

  1. 第一个替代 \bipsum\s \b 在单词边界处断言位置:(^\w|\w$|\W\w|\w\W) ipsum 匹配字符 ipsum 字面意思(区分大小写) \s 匹配任何空白字符(等于[\r\n\t\f\v ]
  2. 2nd Alternative \bipsum\.\s \b assert position at a word boundary: (^\w|\w$|\W\w|\w\W) ipsum 匹配字符 ipsum 从字面上(区分大小写)。匹配字符。字面上(区分大小写) \s 匹配任何空白字符(等于[\r\n\t\f\v ]) 第一个捕获组(\w+) \w+ 匹配任何单词字符(等于[a-zA-Z0-9_]
  • 量词 - 匹配一次到无限次,尽可能多次,根据需要(贪婪)回馈全局模式标志 g 修饰符:全局。所有匹配(第一次匹配后不返回) m 修饰符:多行。导致 ^ 和 $ 匹配每行的开始/结束(不仅是字符串的开始/结束)
于 2020-11-11T06:18:02.023 回答
0

示例语句:“availebleLimit: Double?”。如果您想在“:”字符后查找单词,可以使用以下正则表达式

正则表达式 => :.+$

于 2021-11-16T19:05:44.713 回答
-1

ipsum\b(.*)\b

编辑:尽管取决于您的正则表达式实施,这可能很饿并在 ipsum 之后找到所有单词

于 2009-02-13T14:53:15.437 回答