regexec,是否存在括号,行为

时间:2013-02-08 05:14:53

标签: regex r

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

针对.匹配模式包含零个或多个单词字符,后跟零个或多个\\w*\\.*,输入为.,其后面有一个点后跟一个点,导致匹配长度3。

对抗12.3匹配模式包含以下任何一次出现且仅出现一次 - 单词字符* ,.

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

答案 1 :(得分:2)

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