grammar - 语法中空格方法ws的默认定义
问题描述
根据文档,语法中方法的默认定义ws
是匹配零个或多个空格字符,只要该点不在单词内:
regex ws { <!ww> \s* }
此定义与以下定义有什么区别:
regex ws { \s+ }
我想知道为什么使用零宽度断言<!ww>
而不是更简单的断言\s+
?我还注意到默认定义允许匹配零个空格,但是什么时候会真正发生呢?如果用它\s+
代替不是更清楚\s*
吗?
解决方案
ww
断言意味着有字符匹配当前点的\w
任一侧。!
反转它,意思匹配<!ww>
:
- 在字符串的开头
- 在字符串的末尾
- 当前位置前有非
\w
字符时(如“+”和“a”之间) - 当前位置后面有非
\w
字符时(如“a”和“+”之间)
实际上,这意味着永远不能认为空格出现在两个单词字符之间。但是,在非单词字符之间,或者在单词字符和非单词字符之间,则可以考虑空格。
这符合我们可能希望解析的许多语言的需求。例如,考虑ab+cd
. 默认值ws
将匹配 的任一侧+
,但不会,例如,在标识符内匹配。
对于不适合的语言,只需覆盖该ws
语言所需的默认值即可。
推荐阅读
- selenium-webdriver - 如何在忽略 SSL 认证错误的情况下运行 selenium-side-runner
- uikit - 在 Swift 中将 SwiftUI 视图添加到 UIKit UIView
- docker - 如何通过已设置管理员凭据的 docker-compose 启动 gitlab-ce 容器?
- assembly - 不同的Segment可能会相互折叠
- laravel - 获取用户权限列表
- android - publishApkNameRelease 和 publishNameRelease CI/CD 的区别
- c# - 如何在 C# 中验证巨型十六进制数据包的 CRC-16
- python - 如何将时间序列趋势转换为可测量的预测变量
- r - 如何利用未来未知的数据?
- javascript - 如何在闭包中访问它?