例如,在此文本中:
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”之后的单词。
例如,在此文本中:
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”之后的单词。
这听起来像是一项寻找后向的工作,尽管您应该知道并非所有的正则表达式都支持它们。在您的示例中:
(?<=\bipsum\s)(\w+)
这将匹配“ipsum”后面的任何字母字符序列作为一个完整的单词,然后是一个空格。它与“ipsum”本身不匹配,您无需担心在替换的情况下重新插入它。
不过,正如我所说,某些风格(例如 JavaScript)根本不支持后向查看。许多其他人(实际上大多数人)只支持“固定宽度”的lookbehinds——所以你可以使用这个例子,但不能使用任何重复运算符。(换句话说,(?<=\b\w+\s+)(\w+)
行不通。)
其他一些响应者建议使用不依赖于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
等),它匹配的是一个位置,该位置要么前面有一个单词字符,后面没有一个,或者后面有一个单词字符,前面没有一。
ipsum\b(\w*)
javascript
你可以使用(?=ipsum.*?(\w+))
这也将出现第二次(Nunc)
(?<=\bipsum\s|\bipsum\.\s)(\w+)
/(?<=\bipsum\s|\bipsum\.\s)(\w+)/gm
Positive Lookbehind (?<=\bipsum\s|\bipsum\.\s)
断言下面的 Regex 匹配
\bipsum\s
\b 在单词边界处断言位置:(^\w|\w$|\W\w|\w\W)
ipsum 匹配字符 ipsum 字面意思(区分大小写) \s 匹配任何空白字符(等于[\r\n\t\f\v ]
)\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_]
)示例语句:“availebleLimit: Double?”。如果您想在“:”字符后查找单词,可以使用以下正则表达式
正则表达式 => :.+$
ipsum\b(.*)\b
编辑:尽管取决于您的正则表达式实施,这可能很饿并在 ipsum 之后找到所有单词