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