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