如何解决我如何匹配确切的单词边界,但不包括正面和背面的特殊字符?
我似乎不知道该怎么做。基本上,我只希望tcl中的正则表达式匹配我指定的单词边界,而没有任何特殊字符,例如前后的+-。()。
这是我尝试过的事情,但与之不符:
假设我有以下字符串:
hello world + hello world -hello world hello + hello
我希望它只匹配hello,而不匹配hello +或-hello
\bhello\b
- hello
- +hello
- -hello
- hello+
[^+-]\bhello\b[^+-]
- no matches
[^+-]\bhello\b
- (doesn't match the first hello even though it should've matched)
- hello+
- hello
(?![+-])\bhello\b(?![+-])
- hello
- +hello
- -hello
解决方法
与documented一样,Tcl使用\y
来匹配单词边界,而不是\b
(这是一个退格字符,用于与通用Tcl代码使用的转义符兼容)。这意味着您需要这样的RE:
(?:^|[^-+])\yhello\y(?:$|[^-+])
中间部分是\yhello\y
,它与单词匹配,然后我们需要在开头使用^|[^-+]
来匹配字符串的开头或匹配-
或{{ 1}},最后是+
。 (我将它们放在$|[^-+]
中只是为了限制(?:…)
RE运算符的范围。)
在交互式会话中进行演示:
|
,
另一个选择而不是使用单词边界,是排除将否定字符类中的单词char与不应匹配的其他字符匹配:
(?:^|[^-+.()\w])(hello)(?![-+.()\w])
-
(?:
非捕获组-
^
字符串的开头 -
|
或 -
[^-+.()\w]
否定的字符类别[^
,与列出的所有字符都不匹配
-
-
)
关闭非捕获组 -
(hello)
捕获第1组,打个招呼 -
(?!
负向查找,断言直接在右边的不是-
[-+.()\w]
匹配列出的任何一个
-
-
)
关闭lokahead
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。