我正在尝试做一个正则表达式字符串来快速查找所有强制展开的情况。这将搜索整个代码库中所有带有感叹号的单词。但是,我已经拥有的正则表达式包含了我试图排除的变量的隐式声明。
这是我已有的正则表达式。
(:\s)?\w+(?<!as)\)*!
而且效果很好。它搜索“variableName!”、“(variableName)!”、“hello.hello!”。强制施法的排除也有效。它避免了像“hello as!UIView”这样的情况,但我也试图排除另一种情况,如“var hello:UIView!”其中有一个感叹号。这就是我遇到的问题。我尝试了负面前瞻和负面回顾,但没有解决这种情况。
这是我正在处理的示例正则表达式
(:\s)?\w+(?<!as)\)*!
这是结果
testing.(**test)))!**
Details lists capture **groups!**
hello as! hello
**Hello!**
**testing!**
testing**.test!**
Hello != World
var noNetworkBanner**: StatusBarNotificationBanner!** <-- need to exclude
"var noNetworkBanner**: StatusBarNotificationBanner!**" <-- need to exclude
最佳答案
你可以使用
(?<!:\s)\b\w+(?<!\bas)\b\)*!
我添加了 \b
单词边界只匹配整个单词,并更改了 (:\s)?
负面回溯的可选组,(?<!:\s)
, 不允许 :
+ 需要匹配的单词前的空格。
参见 regex demo和正则表达式图:
详情
-
(?<!:\s)
- 如果在当前位置的左侧立即有一个:
,则匹配失败的否定后视。和一个空格 -
\b
- 单词边界 -
\w+
- 1+ 个单词字符 -
(?<!\bas)
- 如果在当前位置的左侧有一个完整的单词as
,则匹配失败的否定后视。 -
\b
- 单词边界 -
\)*
- 0 个或更多)
字符 -
!
- 一个!
字符。
关于swift - 如何从另一个正则表达式中取反或减去一个正则表达式导致只有一行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533181/