\ w +如何选择整个单词?

时间:2013-12-10 15:33:08

标签: regex

在简单的正则表达式中,我理解

\w

给出一个单词字符;但是,我不知道如何添加加号(+):

\w+

选择整个单词。在我看来,加号只意味着一个或多个单词字符,所以我不明白它是如何扩展到整个单词。

3 个答案:

答案 0 :(得分:5)

类似于[0-9]+表示一个或多个数字的方式,其中每个数字可能不同,类似地\w+表示一个或多个单词字符 ,再次,每个角色可能不同。在这种正常的“贪婪”模式下,它一直持续到它再也找不到为止。 (在一些正则表达式中,你可以通过\w+?使非贪婪,尽可能少地发现正则表达式匹配)。

如果你想要你想要的,重复地要求相同的角色,你需要使用反向引用:

(\w)\1* - 找到任何单词字符,捕获它,然后找到零个或多个相同的字符。


一次一个字符

使用正则表达式\w+和输入字符串Hello World,正则表达式将从头开始并对自己说,“下一个字符是否与\w匹配?是的,所以我们将它添加到结果中,然后向前移动一个字符。“由于+修饰符,在执行此操作后,它继续执行此操作,一次一步,直到找不到任何一个更多。此时它将移动到正则表达式的下一部分(如果有的话)或停止。只需\w+即可获取Hello的所有内容,但不会占据空格或World

关于回溯的说明

默认+修饰符启用“回溯”。这是正则表达式的一个(sometimes-expensive)功能,它允许您在提供最佳成功机会的同时表达您的愿望。例如,如果您的正则表达式为\w+l且输入字符串为Hello World,则正则表达式引擎将捕获所有Hello,然后说“哦亲爱的,现在我需要找到一个lo之后没有一个......也许我走得太远了?“它会备份直到它抓住Hell并查看是否接下来有一个l(没有),然后再次备份到Hel并查看下一个是否有l(有)。最终结果将只捕获字符串Hell

更有趣的是正则表达式\w+r和输入字符串“Hello World”的情况。在这种情况下,引擎会捕获所有Hello并查看其后是否有r。由于它没有找到一个,它一次回溯一个字符,直到它发现H后面没有r,它说“也许以{开头{1}}不是一个好主意“并在字符串中继续前进。最终找到H,然后回溯以仅捕获World,并发现最终需要Wo。此时它返回r作为匹配。

答案 1 :(得分:2)

添加+时,它匹配前面标记中的一个或多个。

它被称为greedy match,在满足下一个标记之前会匹配尽可能多的字符。

http://regexr.com是使用正则表达式的绝佳工具,它还解释了运算符的作用。

答案 2 :(得分:1)

+是一个贪婪的量词。这意味着它将匹配尽可能多的字符,即使存在有效的“较小”匹配。

在字符串Hello world中,\w+匹配Helloworld

向它添加?会使其变得非贪婪,并且会对最小有效匹配感到满意。

在字符串Hello world中,\w+?分别匹配每个字母。