双方括号在正则表达式中代表什么?以下示例让我感到困惑:
[[a-z]]
[[^a-z]]
[[[:digit:]]]
[[^[:digit:]]]
/[[^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 (i.e., 0-9a-fA-F)
/[[: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") #=> #<MatchData "\u{06F2}">
/[[:upper:]][[:lower:]]/.match("Hello") #=> #<MatchData "He">
/[[:xdigit:]][[:xdigit:]]/.match("A6") #=> #<MatchData "A6">
[[:<:]]
和 [[:>:]]
- Rick James[xyz]
" 是一个字符类,将匹配单个字符 x
、y
或 z
。插入符号 "^
" 匹配所有不在方括号内的字符。^
",你可以看到第一个开括号与第一个闭括号相匹配,而第二个闭括号被用作字符类的一部分。最后一个闭括号被视为另一个要匹配的字符。"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
[[^abc]]
和[^abc]
实际上是相同的。 - Alan Moore