【发布时间】:2012-08-29 19:30:01
【问题描述】:
【问题讨论】:
-
我创建了expand-brackets,如果您有兴趣查看与 posix 字符类匹配的 javascript 实现
标签: ruby regex syntax brackets
【问题讨论】:
标签: ruby regex syntax brackets
Posix character classes 使用 [: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)
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") #=> #<MatchData "\u{06F2}">
/[[:upper:]][[:lower:]]/.match("Hello") #=> #<MatchData "He">
/[[:xdigit:]][[:xdigit:]]/.match("A6") #=> #<MatchData "A6">
【讨论】:
[[:<:]] 和 [[:>:]]
'[[' 没有任何特殊含义。 [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] 实际上是相同的。