在Perl 6中,您可以使用<.ws>
来匹配非空白字符。我想匹配任何不匹配<.ws>
的字符,但是我不认为可以使用\S
,因为我相信只能匹配ASCII空格,而<.ws>
可以匹配任何Unicode空间。我该怎么做?
答案 0 :(得分:10)
使用<.ws>
是对ws
令牌的调用,该令牌没有捕获其结果。它的默认行为是:
token ws { <!ww> \s* }
这意味着:
\w
)字符之间在给定的语法中,可以重写该语言以指定当前语言的“空白”。例如,在Perl 6语言语法中,ws
包括对注释,Pod甚至heredocs的解析!
相比之下,\s
是用于匹配单个空格字符的字符类,而\S
的意思是“不是空格字符”。此定义 基于Unicode;如果我们这样做:
say .uniname for (0..0x10FFFF).map(*.chr).grep(/\s/)
然后我们得到:
<control-0009>
<control-000A>
<control-000B>
<control-000C>
<control-000D>
SPACE
<control-0085>
NO-BREAK SPACE
OGHAM SPACE MARK
EN SPACE
EM SPACE
EN SPACE
EM SPACE
THREE-PER-EM SPACE
FOUR-PER-EM SPACE
SIX-PER-EM SPACE
FIGURE SPACE
PUNCTUATION SPACE
THIN SPACE
HAIR SPACE
LINE SEPARATOR
PARAGRAPH SEPARATOR
NARROW NO-BREAK SPACE
MEDIUM MATHEMATICAL SPACE
IDEOGRAPHIC SPACE
因此,\S
最有可能是您要寻找的。 p>