1

我试图理解为什么在以下示例中添加括号会得到不同的响应。任何解释将不胜感激

> regexec("\\w*\\.*", "12.3")
[[1]]
[1] 1
attr(,"match.length")
[1] 3

> regexec("[\\w*\\.*]", "12.3")
[[1]]
[1] 3
attr(,"match.length")
[1] 1
4

2 回答 2

4

[and内部],特殊字符(如.,*等)被视为普通字符,在这里您给出了一个带有字符类的正则表达式,其中包含\\w*\\.*查找单词字符(字母、数字或下划线)或 a*或 a .(即最多允许一个字符)。

字符类允许出现其中指定的任何字符。在这里,在字符类内部,\\w被视为\w. \\.被视为一个点(.这里没有特殊含义)

针对\\w*\\.*匹配模式包含零个或多个单词字符,后跟零个或多个字符,.并且您的输入是12.3两个数字后跟一个点,导致匹配长度为 3。

针对[\\w*\\.*]一个匹配模式包含以下任何一次且仅出现一次 - 单词字符、*、。

由于您的输入开头有一个数字,因此它是匹配的。所以匹配长度为1。

于 2013-02-08T05:20:35.010 回答
2

括号创建一个“字符类”,意思是“匹配任何列出的字符之一”。第一个是“匹配 0 个或多个 \w 后跟 0 个或多个句点”。第二个是“匹配 \w、星号、句点或星号(冗余)之一。”

于 2013-02-08T05:16:43.910 回答