在Perl 6中匹配非空白字符

Kai*_*epi 8 regex perl6 raku

在Perl 6中,可以<.ws>用来匹配非空白字符。我想匹配任何不匹配的字符<.ws>,但我认为我不能使用它,\S因为我相信只匹配ASCII空间,而<.ws>匹配任何Unicode空间。我该怎么做呢?

Jon*_*ton 10

的用法<.ws>ws未捕获其结果的对令牌的调用。它的默认行为是:

token ws { <!ww> \s* }
Run Code Online (Sandbox Code Playgroud)

意思就是:

  1. 我们不能在两个单词(\w)字符之间
  2. 假设是真的,此时有零个或多个空白字符

在给定的语法中,可以将其覆盖以指定当前语言的“空白”。例如,在Perl 6语言语法中,ws包括注释,Pod甚至heredocs的解析!

相反,\s是用于匹配单个空格字符的字符类,\S表示“不是空格字符”。这个定义基于Unicode; 如果我们这样做:

say .uniname for (0..0x10FFFF).map(*.chr).grep(/\s/)
Run Code Online (Sandbox Code Playgroud)

然后我们得到:

<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
Run Code Online (Sandbox Code Playgroud)

因此,最有可能\S是您要寻找的。