Как сделать отрицание или вычесть регулярное выражение из другого результата регулярного выражения в одной строке регулярного выражения - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь создать строку регулярного выражения, чтобы найти все случаи разворачивания силы в swift.Это будет искать все слова с восклицательными знаками во всей базе кода.Тем не менее, регулярное выражение, которое я уже включил, включило неявное объявление переменной, которую я пытаюсь исключить.

Это регулярное выражение, которое у меня уже есть.

(:\s)?\w+(?<!as)\)*!

И оно работает нормально.Он ищет «variableName!», «(VariableName)!», «Hello.hello!».Исключение принудительного литья также работает.Он избегает таких случаев, как «привет как! UIView», но я также пытаюсь исключить другие случаи, такие как «var hello: UIView!»который имеет восклицательный знак.Это проблема, с которой я столкнулся.Я пробовал использовать отрицательный взгляд и отрицательный взгляд назад, и ничто не помогло решить этот случай.

Это пример регулярного выражения, над которым я работаю

(:\s)?\w+(?<!as)\)*!

И это результат

testing.(**test)))!**

Details lists capture **groups!**

hello as! hello

**Hello!**

**testing!**

testing**.test!**

Hello != World

var noNetworkBanner**: StatusBarNotificationBanner!** <-- need to exclude

"var noNetworkBanner**: StatusBarNotificationBanner!**" <-- need to exclude

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете использовать

(?<!:\s)\b\w+(?<!\bas)\b\)*!

Я добавил \b границы слов, чтобы соответствовать только целым словам, и изменил необязательную группу (:\s)? на отрицательный взгляд сзади, (?<!:\s), который запрещает пробел : + перед словом, которое нужно сопоставить.

См. Демонстрационную версию regex и график регулярных выражений:

enter image description here

Детали

  • (?<!:\s) - отрицательный вид сзади, который не соответствует совпадению, если непосредственно слева от текущего местоположения есть : и пробел
  • \b - граница слова
  • \w+ - 1+ слово символов
  • (?<!\bas) - отрицательный взгляд сзади, который не соответствует, если непосредственно слева от текущего местоположения есть целое слово as
  • \b - граница слова
  • \)* - 0 или более ) символов
  • ! - ! char.
...