我认为[[:space:]]
匹配所有类似空格的字符,但“零宽度空间”是个例外。
# normal space
32.chr('UTF-8').match?(/[[:space:]]/) #=> true
# no break space
160.chr('UTF-8').match?(/[[:space:]]/) #=> true
# en space
8194.chr('UTF-8').match?(/[[:space:]]/) #=> true
# em space
8195.chr('UTF-8').match?(/[[:space:]]/) #=> true
# thin space
8201.chr('UTF-8').match?(/[[:space:]]/) #=> true
# ideographic space
12288.chr('UTF-8').match?(/[[:space:]]/) #=> true
# zero width space
8203.chr('UTF-8').match?(/[[:space:]]/) #=> false
# zero width no break space
65279.chr('UTF-8').match?(/[[:space:]]/) #=> false
如何编写匹配所有这些空格的正则表达式?
答案 0 :(得分:5)
不幸的是,两个零宽度空格不被视为空格,而是“Other:Format”个字符。
对应200B
的{{3}}, Ctrl F ,它的标题为“格式字符。”因为你想匹配ZWSP,我没有看到任何理由不匹配所有格式字符,可以做什么:
/\p{Zs}|\p{Cf}/ =~ 65279.chr('UTF-8')
#⇒ 0
请注意,在处理Unicode时,任何明确的字符枚举都是非常糟糕的主意。规范经常更改 ,明确的字符列表将在明天早上在此上下文中过时。
有两种一般方法可以解决这个问题:
[[:space:]]
或\p{Zs}
。)答案 1 :(得分:1)
按要求。
从UCD数据库执行Unicode 9查询,这些属性都显示为 为了空间。
运行正则表达式返回28个字符。
如果只运行\s
,则会显示29个字符。
但是,如果你把它们组合起来,就会有32个字符 我假设是完整的空白集。
[\x{9}-\x{D}\x{1C}-\x{20}\x{85}\x{A0}\x{1680}\x{2000}-\x{200B}\x{200E}-\x{200F}\x{2028}-\x{2029}\x{202F}\x{205F}\x{3000}]
或
[\s\p{White_Space}\p{Pattern_White_Space}\p{Bidi_Class=White_Space}\p{General_Category=Space_Separator}\p{Line_Break=Space}\p{Line_Break=ZWSpace}]
参考文献:
http://www.regexformat.com/scrn8/UCDusage.htm
http://www.regexformat.com/scrn8/Uusage.jpg
这是完整的清单
000009 <control-0009>
00000A <control-000A>
00000B <control-000B>
00000C <control-000C>
00000D <control-000D>
00001C <control-001C>
00001D <control-001D>
00001E <control-001E>
00001F <control-001F>
000020 SPACE
000085 <control-0085>
0000A0 NO-BREAK SPACE
001680 OGHAM SPACE MARK
002000 EN QUAD
002001 EM QUAD
002002 EN SPACE
002003 EM SPACE
002004 THREE-PER-EM SPACE
002005 FOUR-PER-EM SPACE
002006 SIX-PER-EM SPACE
002007 FIGURE SPACE
002008 PUNCTUATION SPACE
002009 THIN SPACE
00200A HAIR SPACE
00200B ZERO WIDTH SPACE
00200E LEFT-TO-RIGHT MARK
00200F RIGHT-TO-LEFT MARK
002028 LINE SEPARATOR
002029 PARAGRAPH SEPARATOR
00202F NARROW NO-BREAK SPACE
00205F MEDIUM MATHEMATICAL SPACE
003000 IDEOGRAPHIC SPACE