(也)匹配空字符串的正向前瞻

时间:2013-06-11 12:09:59

标签: regex groovy regex-lookarounds

我正在使用一些Groovy代码实习,我遇到了以下模式:

(?=(^\w)*)(\w)+(?=(^\w)*)

它基本上只是找到单词(单词字符的连续集合)来筛选出标点符号等。有没有理由不简单地使用这种模式?

\w+

由于这不是我的代码,我想可能有一个理由使用如此荒谬复杂的东西,但与此同时,它似乎效率非常低。这两者有什么区别吗?他们似乎在http://regexpal.com/上给出了相同的结果。

1 个答案:

答案 0 :(得分:0)

为什么不使用\w+ 的答案是capturing groups,但这并没有解释正则表达式中任何可能的微妙或逻辑。

部分捕获(可选)前缀和后缀字符串以供以后使用,并且正如 m.buettner ^\w所指出的那样很可能是[^\w] ,意味着第二个最终组永远不会匹配(尽管可能存在多行输入的情况,请参阅Pattern Matching Flags,我自己看不到,因为\w+将无法匹配并消耗和结束线)。

使用(?=)*表示作者可能不太熟悉正则表达式,通常使用环顾来约束({{1} }有效地撤消这里),或优化匹配。

一种礼貌的方法可能是假设在开发过程中正在“调整”正则表达式,并留下了一些不需要的子模式......