2013-02-08 29 views
1

我想了解爲什麼在下面的示例中添加括號會得到不同的響應。將不勝感激regexec,是否存在括號,行爲

> 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

[],特殊字符,如.*等被視爲正常的字符,在這裏你給一個正則表達式與字符類封閉\\w*\\.*看起來一個字字符(字母,數字或下劃線)或*.(即允許最多一個字符)。

字符類允許在其中指定任何字符的出現。在此,內部角色類別\\w被視爲\w\\.被視爲一個點

反對\\w*\\.*匹配模式包含零個或多個單詞字符後跟零個或多個.(爲.這裏沒有什麼特別的意思),你的輸入是12.3其中有兩位數字後跟一個點,導致匹配長度爲3.

針對[\\w*\\.*]匹配模式包含以下任何一次且僅出現一次 - 單詞字符*,。

由於您的輸入在開頭處有一個數字,因此它是匹配的。所以匹配長度爲1.

+0

感謝您的明確解釋 –

2

括號創建一個「字符類」,這意味着「匹配任何列出的字符之一」。第一個是「匹配0或更多\ w後跟0或更多的時間。」第二個是「匹配\ w,星號,句點或星號(多餘)」之一。「