我试着研究regexes,然后我发现了一个令人困惑的场景:
假设您有文本:
你好,世界
如果运行regex (\w)*,它将给出:
“你好”,“O”
我所期望的是:
“你好”,“h”
难道不是意味着什么字字吗?
另一个示例
文本:
美味蛋糕
(W)*产出:
‘美味’,‘'s’‘
我所期望的是:
“美味”,“D”
发布于 2014-04-21 00:07:55
(\w)*
Match the regular expression below and capture its match into backreference number 1 «(\w)*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Note: You repeated the capturing group itself. The group will capture only the last iteration. Put a capturing group around the repeated group to capture all iterations. «*»
Match a single character that is a “word character” (letters, digits, and underscores) «\w»给你两支火柴:
hello
world
\w
Match a single character that is a “word character” (letters, digits, and underscores) «\w»将匹配句子中的每个字符(单独):
H
E
我
我
O
W
O
R
我
D
发布于 2014-04-21 00:30:01
Sam,(\w)*在第1组中返回"s“的原因是只有一个组1。每次(W)匹配一个新字符时,括号会强制将字符的新值捕获到第1组中。"s”是最后一个字符,因此它是引擎向您报告的最后一个组1。
如果您想将第一个字母捕获到第一组中,您可以使用以下内容:
(\w)\w*这将导致捕获第一个字符。捕获括号上没有量词,所以第1组不会改变。剩余的\w*可选择匹配任何其他字符。
还请注意,当您对"hello“运行(\w)*时,不像您所说的那样是"hello”和"o“。比赛(如果你匹配他们全部)是“你好”和“世界”。第一组捕获的是"o“和"d",这是每个单词的最后一个字母。
参考资料:都是关于俘获
发布于 2014-04-21 00:30:29
“*”匹配前面的零或更多次,并紧密绑定到左侧的元素。例子: m*o将匹配o,mo,mmo,mmmmo等。圆括号()用于标记子表达式,也称为捕获组。因此,(\w)*是重复捕获组。
Regex Demo
https://stackoverflow.com/questions/23188962
复制相似问题