Совпадение с именем com.project.name, но не тогда, когда оно содержит что-то еще

У меня есть следующий код:

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 ответ

Вы можете использовать это регулярное выражение с отрицательными прогнозными утверждениями:

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

RegEx Demo

В этом отрицательном прогнозном утверждении используются чередования для неудачного совпадения в 3 разных совпадениях в любом месте ввода:

  1. com\.project\.name
  2. print\(
  3. fatalError\(
Другие вопросы по тегам