Соответствует каждой строке в кавычках, которая не содержит подстроку - PullRequest
4 голосов
/ 06 января 2010

Многострочная тестовая строка:

dkdkdkdk dkdkdkdk dkdkdkd dkdkdkd "hello" dkdkdkdkdk dkdkdk "goodbye.hello"  dkdkdkd kdkdkd kdkdkdk "hello.goodbye.hello" dddd "test" ssss "http:x-y.f/z/z" "" "."
"http:/dkdkd/dkdkdk/dkdkdkdkdkdk.g"

Я хочу сопоставить каждую строку в кавычках, которая содержит "hello"

Это соответствует каждой строке в кавычках

\"(.+?)\"

Это соответствует каждой строке в кавычках, которая содержит привет

\"(.*?)hello(.*?)\"

Но это не соответствует каждой строке в кавычках, которая НЕ содержит привет

\"(.*?)(?!hello)(.*?)\"

Спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Мой первоначальный ответ: нужно применять отрицательный прогноз каждый раз, когда точка соответствует, например:

\"((?!hello).)*?\"

Однако существует проблема с этим регулярным выражением в целевых объектах, которые содержат более одной строки в кавычках - пробел между закрывающей кавычкой одной строки и начальной строкой другой кавычки также является «строкой в ​​кавычках» для этого выражения.

Поэтому я предлагаю извлечь все строки в кавычках из вашей цели, используя простой шаблон "[^"]*", а затем оценить каждое совпадение для слова (слов), которые вы хотите запретить.

0 голосов
/ 06 января 2010

Попробуйте это

\"((?!hello).)*?\"
...