我试图理解为什么在以下示例中添加括号会得到不同的响应。任何解释将不胜感激
> regexec("\\w*\\.*", "12.3")
[[1]]
[1] 1
attr(,"match.length")
[1] 3
> regexec("[\\w*\\.*]", "12.3")
[[1]]
[1] 3
attr(,"match.length")
[1] 1
在[
and内部]
,特殊字符(如.
,*
等)被视为普通字符,在这里您给出了一个带有字符类的正则表达式,其中包含\\w*\\.*
查找单词字符(字母、数字或下划线)或 a*
或 a .
(即最多允许一个字符)。
字符类允许出现其中指定的任何字符。在这里,在字符类内部,\\w
被视为\w
. \\.
被视为一个点(.
这里没有特殊含义)
针对\\w*\\.*
匹配模式包含零个或多个单词字符,后跟零个或多个字符,.
并且您的输入是12.3
两个数字后跟一个点,导致匹配长度为 3。
针对[\\w*\\.*]
一个匹配模式包含以下任何一次且仅出现一次 - 单词字符、*、。
由于您的输入开头有一个数字,因此它是匹配的。所以匹配长度为1。
括号创建一个“字符类”,意思是“匹配任何列出的字符之一”。第一个是“匹配 0 个或多个 \w 后跟 0 个或多个句点”。第二个是“匹配 \w、星号、句点或星号(冗余)之一。”