我正在做一些Groovy代码的实习,我遇到了以下模式:
(?=(^w)*)(w)+(?=(^w)*)
它基本上只是查找单词(单词字符的连续集合)来筛选标点符号等。有理由不简单地使用这种模式吗?
w+
既然这不是我的代码,我想使用如此复杂的东西可能是有原因的,但同时它看起来会非常低效。这两者有什么区别吗?他们似乎在http://regexpal.com/上给出了相同的结果
为什么不使用w+
的答案是捕获组,这并不能解释任何可能的微妙或逻辑在正则表达式虽然。
(可选的)前缀和后缀字符串被部分捕获以备以后使用,如m所示。buettner ^w
很可能是[^w]
,这意味着第二个最终组永远不会匹配(尽管可能有多行输入的情况,请参阅模式匹配标志,我自己看不到,因为w+
不会匹配并消耗和结束行)。
同时使用(?=)
和*
表明作者可能对正则表达式不太熟悉,通常您使用查找来约束(*
在这里有效地取消),或优化匹配。
一种礼貌的方法可能是假设regex在开发过程中被"调整",并且已经留下了一些不需要的子模式…