REGEX объединяет строки регулярных выражений, а затем находит все, кроме совпадений - PullRequest
1 голос
/ 06 августа 2020

У меня есть две строки регулярных выражений:

  1. [^'"0-9+\-%*\/<>\!=&|]
  2. (['"])(?:\\\1|.)*?\1

Первая находит все, кроме перечисленных символов. Второй находит что-либо между кавычками, включая кавычки.

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

Hello world "Это тест"
" Другой тест: «5 x 4
'И здесь есть экранированная цитата, не надо' Blue Boy
» Это одинарная кавычка ', но не' t заканчивать цитату, поскольку она начиналась двойными кавычками "
привет
28 + 2/10 * 3 ab c
"Lorem ipsum dolor \" sit 'amet' "

Возможно ли это? Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 07 августа 2020

Вы можете использовать шаблон PCRE, например

(?:(['"])(?:\\\1|.)*?\1|\d+(?:\s*[*\/+x-]\s*\d+)*)(*SKIP)(*F)|(?=\S)[^'"0-9+\-%*\/<>\!=&|]+

См. Демонстрацию регулярного выражения

Подробности

  • (?:(['"])(?:\\\1|.)*?\1|\d+(?:\s*[*\/+x-]\s*\d+)*)(*SKIP)(*F) - либо подстрока между " или ' символов, либо 1+ цифр, за которой следует 0 или более вхождений /, +, -, * или x, заключенных в 0 + пробелы, а затем 1+ цифр, совпадение отбрасывается, и следующее совпадение ищется в месте сбоя
  • |
  • (?=\S) - следующий символ должен быть не -whitespace char
  • [^'"0-9+\-%*\/<>\!=&|]+ - 1 или более символов, кроме символов, указанных в инвертированном классе символов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...