swift - 如何从另一个正则表达式中取反或减去一个正则表达式导致只有一行正则表达式

标签 swift regex xcode subtraction negate

我正在尝试做一个正则表达式字符串来快速查找所有强制展开的情况。这将搜索整个代码库中所有带有感叹号的单词。但是,我已经拥有的正则表达式包含了我试图排除的变量的隐式声明。

这是我已有的正则表达式。

(:\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和正则表达式图:

enter image description here

详情

  • (?<!:\s) - 如果在当前位置的左侧立即有一个 :,则匹配失败的否定后视。和一个空格
  • \b - 单词边界
  • \w+ - 1+ 个单词字符
  • (?<!\bas) - 如果在当前位置的左侧有一个完整的单词 as,则匹配失败的否定后视。
  • \b - 单词边界
  • \)* - 0 个或更多 )字符
  • ! - 一个 !字符。

关于swift - 如何从另一个正则表达式中取反或减去一个正则表达式导致只有一行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533181/

相关文章:

ios - 在 Objective-c 项目中添加第二个 swift 文件没有效果

ios - 自定义UISlider拇指图标: How to stop thumb icon from reverting back to default circle icon when drag?

java - 正则表达式 Java 字符串由星号分割

ios - 当我在 Xcode 5 中使用工作区时,为什么源代码管理不起作用?

Xcode 在最近的项目列表中不显示最近的项目

objective-c - 在 Xcode 中将 RSS 日期格式转换为德语日期

ios - 将字典数据转换为 HTTP url 格式

ios - topLayoutGuide 在导航 Controller 推送后移动

java - 正则表达式最后一次出现,后面仍然有关键字

python - 从 Pandas DataFrame 的一列中提取 2 个特殊字符之间的子字符串