我正在尝试研究正则表达式,我遇到了这种令人困惑的情况:
假设你有文字:
你好世界
如果你运行正则表达式(\ w)*,它会给出:
['你好','o']
我的期望是:
['你好','h']
不是指任何单词字符吗?
另一个例子:
文本:
美味的蛋糕
(\ w)*输出:
['Delicious','s']
我的期望:
['Delicious','D']
答案 0 :(得分:0)
山姆,为什么(\ w)*在第1组中对“美味”返回“s”的原因是,只能有一个第1组。每次新角色与(\ w)匹配时,括号强制要捕获到第1组中的字符的新值。“s”是最后一个字符,因此它是引擎向您报告的最终第1组。
如果您想要将第一个字母捕获到第1组中,您可以选择以下内容:
(\w)\w*
这会导致捕获第一个字符。捕获括号没有量词,因此组1不会改变。剩余的\w*
可选地匹配任何其他字符。
另请注意,当你对“hello world”运行(\w)*
时,匹配不是你所说的“你好”和“o”。比赛(如果你匹配它们)是“你好”和“世界”。第1组捕获的是“o”和“d”,即每个单词的最后一个字母。
答案 1 :(得分:0)
' *'将前一部分匹配零次或多次,并紧密绑定到左侧的元素。 示例:m * o将匹配o,mo,mmo,mmmmo等。 圆括号()用于标记子表达式,也称为捕获组。 所以(\ w)*重复捕获组。
答案 2 :(得分:0)
请记住,重复捕获组始终捕获最后一组。
所以
(\w)*
上的{p> hello
将一次检查一个字符,除非它到达最后一个匹配。
因此,将在捕获组中获得o
。
(\w)*
上的{p> helloworld
将一次检查一个字符,除非它到达最后一个匹配。
因此,将在捕获组中获得d
。
(\w)*
上的{p> hello123
将一次检查一个字符,除非它到达最后一个匹配。
因此,将在捕获组中获得3
。
(\w)*
上的{p> helloworld@3w4
将一次检查一个字符,除非它到达最后一个匹配。因此,d
不是有效@
ord字符(仅允许\w
),因此会在捕获组中获得[_0-9a-zA-Z]
。
答案 3 :(得分:-1)
(\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»
会给你两场比赛:
的你好
世界强>
\w
Match a single character that is a “word character” (letters, digits, and underscores) «\w»
将匹配句子上的每个字符(单独):
ħ
Ë
升
升
Ø
w ^
Ø
[R
升
d
答案 4 :(得分:-1)