【问题标题】:How to do negate or subtract a regex from another regex result in just one line of regex如何从另一个正则表达式中取反或减去一个正则表达式导致只有一行正则表达式
【发布时间】:2019-10-25 06:07:11
【问题描述】:

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

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

(:\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

【问题讨论】:

  • 试试(?&lt;!:\s)\b\w+(?&lt;!\bas)\b\)*!,见this demo
  • 很好用!谢谢你。感谢您的帮助

标签: swift regex xcode subtraction negate


【解决方案1】:

你可以使用

(?<!:\s)\b\w+(?<!\bas)\b\)*!

我添加了\b 单词边界以仅匹配整个单词,并将(:\s)? 可选组更改为否定的lookbehind,(?&lt;!:\s),这不允许在您需要匹配的单词之前使用: + 空格。

查看regex demo 和正则表达式图:

详情

  • (?&lt;!:\s) - 如果在当前位置的左侧紧邻有一个 : 和一个空格,则匹配失败。
  • \b - 字边界
  • \w+ - 1+ 字字符
  • (?&lt;!\bas) - 如果在当前位置的左侧紧邻有一个完整的单词as,则匹配失败
  • \b - 字边界
  • \)* - 0 个或多个 ) 字符
  • ! - 一个 ! 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-07-13
    • 2010-10-04
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多