匹配“ com.project.name”,但不包含其他内容时匹配

时间:2018-08-09 15:39:05

标签: 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)"

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

1 个答案:

答案 0 :(得分:0)

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

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

RegEx Demo

此否定的超前断言使用交替来使输入中任何3个不同匹配项的匹配失败:

  1. com\.project\.name
  2. print\(
  3. fatalError\(