根据the documentation,语法中ws
方法的默认定义是匹配零个或多个空白字符,只要该点不在单词内:
regex ws { <!ww> \s* }
这个定义和以下内容有什么区别:
regex ws { \s+ }
我想知道为什么使用零宽度断言<!ww>
而不是更简单的\s+
?我还注意到默认定义允许匹配零空格,但什么时候会发生?是不是更清楚它是否使用\s+
而不是\s*
?
ww
断言意味着在当前点的任一侧存在匹配\w
的字符。 !
反转它,意味着<!ww>
匹配:
\w
字符时(例如“+”和“a”之间)\w
字符时(例如“a”和“+”之间)实际上,这意味着永远不会认为在两个单词字符之间出现空格。但是,在非单词字符之间,或在单词字符和非单词字符之间,可以考虑空格。
这遵循我们可能希望解析的许多语言。例如,考虑ab+cd
。默认的ws
将匹配+
的任一侧,但不会,例如,在标识符内匹配。
对于那些不适合的语言,只需要覆盖默认的ws
,无论语言需要什么。