Совпадение с именем 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\()).*
В этом отрицательном прогнозном утверждении используются чередования для неудачного совпадения в 3 разных совпадениях в любом месте ввода:
com\.project\.name
print\(
fatalError\(