根据the documentation,ws
方法在语法中的默认定义是匹配零个或多个空白字符,只要该点不在单词之内:
regex ws { <!ww> \s* }
此定义与以下内容有何区别:
regex ws { \s+ }
我想知道为什么使用零宽度断言<!ww>
而不是更简单的\s+
吗?我还注意到默认定义允许匹配零个空格,但是什么时候会真正发生呢?是否使用\s+
而不是\s*
更清楚?
答案 0 :(得分:9)
ww
断言意味着在当前点的任一侧都有与\w
匹配的字符。 !
将其反转,表示<!ww>
符合以下条件:
\w
字符时(例如在“ +”和“ a”之间)\w
字符时(例如在“ a”和“ +”之间)那么,有效地,这意味着决不能将空格视为两个单词字符之间的空白。但是,在非单词字符之间,或者在单词字符和非单词字符之间,则可以考虑空白。
这遵循了我们可能希望解析的多种语言。例如,考虑ab+cd
。默认的ws
将与+
的任一侧匹配,但例如在标识符内将不匹配。
对于不合适的语言,只需替换默认ws
即可满足该语言的需求。