swift - 匹配 "com.project.name"但不包含其他内容

标签 swift regex regex-negation swiftlint

我有以下代码:

var i = "test"

var i = "com.project.name.test"

print("something else")
fatalError("some error")

我有一个正则表达式:

"((?!com\.project\.name).)*"

匹配任何不包含"com.project.name"的字符串。

但是,我想将其修改为仍然具有上述条件,但如果该行包含 print\(.*?\)fatalError\(.*?\).

我为什么要这样做?因为我只能将正则表达式用于 SwiftLint 自定义规则,而现在我的正则表达式是贪婪的,并且匹配项目中开发人员忘记本地化的每个字符串..

我尝试过的:

"((?!com\\.project\\.name).)*(?!print)(?!fatalError)"

但它不起作用,而是与原始表达式匹配。

最佳答案

您可以将此正则表达式与否定先行断言一起使用:

^(?!.*(?:com\.project\.name|print\(|fatalError\()).*

RegEx Demo

这个否定的先行断言使用交替来使输入中任意位置的 3 个不同匹配项的匹配失败:

  1. com\.project\.name
  2. 打印\(
  3. fatal error \(

关于swift - 匹配 "com.project.name"但不包含其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51771070/

相关文章:

javascript - Jquery 验证引擎正则表达式

ios - 在 Swift 中反向搜索电话号码?

Swift array.map 将 NSNumber 转换为 UInt

ios - Storyboard界面构建器约束中的颜色意味着什么

c++ - MSVC 正则表达式匹配

Java 正则表达式转义撇号

swift - UIPanGestureRecognizer - ImageView 在平移后恢复到原始位置

javascript - URI 正则表达式 : Replace http://, https ://, ftp://如果 URL 有效则为空字符串

java - 正则表达式去除所有方括号,除了特定前缀之后的方括号

java - 从字符串中删除非字母字符会留下 UTF-16 高代理项