首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( \w )*和\w之间的差异?

( \w )*和\w之间的差异?
EN

Stack Overflow用户
提问于 2014-04-21 00:04:32
回答 5查看 615关注 0票数 0

我试着研究regexes,然后我发现了一个令人困惑的场景:

假设您有文本:

你好,世界

如果运行regex (\w)*,它将给出:

“你好”,“O”

我所期望的是:

“你好”,“h”

难道不是意味着什么字字吗?

另一个示例

文本:

美味蛋糕

(W)*产出:

‘美味’,‘'s’‘

我所期望的是:

“美味”,“D”

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-21 00:07:55

代码语言:javascript
复制
(\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

代码语言:javascript
复制
\w

Match a single character that is a “word character” (letters, digits, and underscores) «\w»

将匹配句子中的每个字符(单独):

H

E

O

W

O

R

D

票数 -1
EN

Stack Overflow用户

发布于 2014-04-21 00:30:01

Sam,(\w)*在第1组中返回"s“的原因是只有一个组1。每次(W)匹配一个新字符时,括号会强制将字符的新值捕获到第1组中。"s”是最后一个字符,因此它是引擎向您报告的最后一个组1。

如果您想将第一个字母捕获到第一组中,您可以使用以下内容:

代码语言:javascript
复制
(\w)\w*

这将导致捕获第一个字符。捕获括号上没有量词,所以第1组不会改变。剩余的\w*可选择匹配任何其他字符。

还请注意,当您对"hello“运行(\w)*时,不像您所说的那样是"hello”和"o“。比赛(如果你匹配他们全部)是“你好”和“世界”。第一组捕获的是"o“和"d",这是每个单词的最后一个字母。

参考资料:都是关于俘获

票数 0
EN

Stack Overflow用户

发布于 2014-04-21 00:30:29

“*”匹配前面的零或更多次,并紧密绑定到左侧的元素。例子: m*o将匹配o,mo,mmo,mmmmo等。圆括号()用于标记子表达式,也称为捕获组。因此,(\w)*是重复捕获组。

Regex Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23188962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档