Регулярное совпадение, если не внутри одиночных кавычек [duplicate]

0
задан Nived 13 April 2015 в 16:24
поделиться

1 ответ

Есть два способа решить эту проблему, в зависимости от того, что вы хотите делать с выходом.

Сначала сопоставьте (но не фиксируйте) текст в кавычках. (Это , в частности , соответствующая тому, что вам НЕ нужно.) Используя трубу |, используйте группы захвата, чтобы выбрать все, что вы хотите сохранить.

Пример :

".*?"|(\b\S+\b)

Вы можете увидеть пример этого здесь .

Другой вариант, используя look-arounds, - это специально оглянуться назад начало слов, чтобы убедиться, что " не появляется там:

(?<!")(\b\S+\b)(?!")

Вы можете видеть, что здесь .

Это может иметь проблема при запуске нескольких слов, но это должно привести вас к правильному пути, и вы можете указать, работает ли один из этих методов лучше для вас, чем другой.

0
ответ дан OnlineCop 18 August 2018 в 00:26
поделиться
  • 1
    Первый, похоже, работает. Второй - нет, если в кавычках содержится более двух слов. – Nived 13 April 2015 в 17:31
  • 2
    Вы можете расширить первый из них еще немного, чтобы включить экранированные кавычки: regex101.com/r/lH7uN6/4 , который использует отрицательные обратные следы, чтобы убедиться, что вы не согласны с \". При желании, если вы хотите разрешить '.' для размещения нескольких строк добавьте флаг s (рядом с флагами gm). Вы можете увидеть его в действии на этой странице regex101. – OnlineCop 13 April 2015 в 18:57
Другие вопросы по тегам:

Похожие вопросы: