2014-10-28 2 views
2

Можно ли сопоставлять текст за пределами кавычек с помощью стандартного парсера регулярных выражений? Я видел этот ответ, но это делается с помощью PCRE:Regex соответствует всем словам вне кавычек?

Can regex match all the words outside quotation marks?

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

я сделал что-то вроде этого, но это не правильно работает

[^'"]*(?=(?:(['"])+(.*?\1))|([^'"]*$)) 

Спасибо заранее.

UPD1: Идея состоит в том, чтобы соответствовать любому типу текста вне кавычек, решение не должно зависеть от ввода.

+0

** language-agnostic regex ** Что это? – anubhava

+1

Я не верю, что существует одно регулярное выражение, которое будет работать на * всех * языках. Будет хотя бы одна платформа, которая не поддерживает определенную функцию. –

ответ

3
<yourtext>(?=(?:[^"]*"[^"]*")*[^"]*$) 

Да, вы можете сделать это при помощи положительной lookahead.But это предполагает, что у вас есть сбалансированный " и нет бродячих " лежал somewhere.See демо.

http://regex101.com/r/sU3fA2/29

0

Эта модель будет захватывать слова вне двойные кавычки

"[^"]+"|(\S+) 

Demo

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

"[^"]+"|([^"]+) 

Demo

0

Я пришел с этим решением:

http://regex101.com/r/pI8xA4/2

это не будет работать очень хорошо, если у нас есть нечетное число цитат - В данном случае это будет пропускать первую цитату. Но это лучшее решение для меня на данный момент.

+0

, пожалуйста, примите одно из решений и поставьте логический конец на вопрос – vks

Смежные вопросы