Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在一行正则表达式中求反或从另一个正则表达式结果中减去一个正则表达式_Swift_Regex_Xcode_Subtraction_Negate - Fatal编程技术网

Swift 如何在一行正则表达式中求反或从另一个正则表达式结果中减去一个正则表达式

Swift 如何在一行正则表达式中求反或从另一个正则表达式结果中减去一个正则表达式,swift,regex,xcode,subtraction,negate,Swift,Regex,Xcode,Subtraction,Negate,我正在尝试使用正则表达式字符串查找swift中所有强制展开的情况。这将在整个代码库中搜索所有带感叹号的单词。然而,我已经包含的正则表达式包含了我试图排除的变量的隐式声明 这是我已经有的正则表达式 (:\s)?\w+(?<!as)\)*! (:\s)?\w+(? 它工作得很好。它搜索“variableName!”、“(variableName)!、“hello.hello!”。强制转换的排除也起作用。它避免了“hello as!UIView”这样的情况,但我也尝试排除其他情况,例如“var

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

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

(:\s)?\w+(?<!as)\)*!
(:\s)?\w+(?
它工作得很好。它搜索“variableName!”、“(variableName)!、“hello.hello!”。强制转换的排除也起作用。它避免了“hello as!UIView”这样的情况,但我也尝试排除其他情况,例如“var hello:UIView!”它有一个感叹号。这就是我遇到的问题。我试过负前瞻和负前瞻,但没有解决这种情况

这是我正在处理的示例正则表达式

(:\s)?\w+(?<!as)\)*!
(:\s)?\w+(?
这就是结果

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
测试(**test))**
详细信息列表捕获**组**
你好!你好
**你好!**
**测试**
测试**。测试**
你好世界
var noNetworkBanner**:StatusBarNotificationBanner!** 你可以用

(?<!:\s)\b\w+(?<!\bas)\b\)*!
(?
我添加了
\b
单词边界以仅匹配整个单词,并将
(:\s)?
可选组更改为负回溯,
(?),这不允许在需要匹配的单词之前使用
+空格

请参见和正则表达式图:

详细信息

  • (?-如果在当前位置的左侧有一个
    和一个空格,则会导致匹配失败的反向查找
  • \b
    -单词边界
  • \w+
    -1+字字符
  • (?-如果在当前位置的左侧有一个完整的单词
    as
  • \b
    -单词边界
  • \)*
    -0或更多
    字符
  • -一个
    字符
您可以使用

(?<!:\s)\b\w+(?<!\bas)\b\)*!
(?
我添加了
\b
单词边界以仅匹配整个单词,并将
(:\s)?
可选组更改为负回溯,
(?),这不允许在需要匹配的单词之前使用
+空格

请参见和正则表达式图:

详细信息

  • (?-如果在当前位置的左侧有一个
    和一个空格,则会导致匹配失败的反向查找
  • \b
    -单词边界
  • \w+
    -1+字字符
  • (?-如果在当前位置的左侧有一个完整的单词
    as
  • \b
    -单词边界
  • \)*
    -0或更多
    字符
  • -一个
    字符

尝试<代码>(看,很好用!谢谢。谢谢你的帮助)。请考虑点击接受。✓ 在左边(参见)。试试<代码>(?看,很好)。谢谢。谢谢你的帮助。请考虑点击接受。✓ 在左边(参见)。