Использование <.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
- это то, что вы ищете.