如何在正则表达式中使用双括号?

双方括号在正则表达式中意味着什么? 我对以下示例感到困惑:

/[[^abc]]/ /[^abc]/ 

我正在使用Rubular进行测试,但我发现双支架和单支架之间没有任何区别。

Posix字符类使用[:alpha:]表示法,它们在正则表达式中使用,如:

 /[[:alpha:][:digit:]]/ 

您需要在上面的链接中向下滚动查看Posix信息的方法。 来自文档:

POSIX括号表达式也类似于字符类。 它们提供了上述便携式替代方案,其附加好处是它们包含非ASCII字符。 例如,/ \ d /仅匹配ASCII十进制数字(0-9); 而/ [[:digit:]] /匹配Unicode Nd类别中的任何字符。

 /[[:alnum:]]/ - Alphabetic and numeric character /[[:alpha:]]/ - Alphabetic character /[[:blank:]]/ - Space or tab /[[:cntrl:]]/ - Control character /[[:digit:]]/ - Digit /[[:graph:]]/ - Non-blank character (excludes spaces, control characters, and similar) /[[:lower:]]/ - Lowercase alphabetical character /[[:print:]]/ - Like [:graph:], but includes the space character /[[:punct:]]/ - Punctuation character /[[:space:]]/ - Whitespace character ([:blank:], newline, carriage return, etc.) /[[:upper:]]/ - Uppercase alphabetical /[[:xdigit:]]/ - Digit allowed in a hexadecimal number (ie, 0-9a-fA-F) 

Ruby还支持以下非POSIX字符类:

 /[[:word:]]/ - A character in one of the following Unicode general categories Letter, Mark, Number, Connector_Punctuation /[[:ascii:]]/ - A character in the ASCII character set # U+06F2 is "EXTENDED ARABIC-INDIC DIGIT TWO" /[[:digit:]]/.match("\u06F2") #=> # /[[:upper:]][[:lower:]]/.match("Hello") #=> # /[[:xdigit:]][[:xdigit:]]/.match("A6") #=> # 

‘[[‘没有任何特殊含义。 [xyz]是一个字符类,将匹配单个xyz 。 克拉^取所有字符不在括号中。

为简单起见,删除^ ,您可以看到第一个开括号与第一个右括号匹配,第二个闭括号被用作字符类的一部分。 最后的近括号被视为要匹配的另一个字符。

 irb(main):032:0> /[[abc]]/ =~ "[a]" => 1 irb(main):033:0> /[[abc]]/ =~ "a]" => 0 

在某些情况下,这似乎与原始结果相同

 irb(main):034:0> /[abc]/ =~ "a]" => 0 irb(main):034:0> /[abc]/ =~ "a" => 0 

但这只是因为你的正则表达式没有寻找完全匹配。

 irb(main):036:0> /^[abc]$/ =~ "a]" => nil