【问题标题】:Match "com.project.name" but not when it contains something else匹配“com.project.name”,但不匹配包含其他内容
【发布时间】:2019-01-17 03:47:45
【问题描述】:

我有以下代码:

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)).*

标签: swift regex regex-negation swiftlint


【解决方案1】:

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

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

RegEx Demo

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多