LINUX.ORG.RU

Perl регулярное выражение


0

0

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

я делаю /[^\\]?"(.+)[^\\]"/ms

Но - в тексте может быть много строк в кавычках, например

a => "aaa"
b => "bbb"

в результате мой регэксп захватывает < aaa"
b => "bbb >

а я хочу вовсе не это 8((

Пробовал его ограничить и что-то ен получается.

★★★★

заэскейпнутую строку - не строку а кавычку конечно же.

OxiD ★★★★
() автор топика

я вроде исправил /[^\\]?"(.*?)[^\\]?"/ms Но теперь почему-то захватываются пробелы перед подстрокой.

OxiD ★★★★
() автор топика
Ответ на: комментарий от teferiincub

А можешь показать пример? просто мне кажется что в моем случае это не сильно поможет, т.к \" это конец слова такой же как и " Или я ошибаюсь?

OxiD ★★★★
() автор топика

для подстроки в кавычках лучше использовать что то вроде /(?<!\\)\"(.*?)(?<!\\)\"/

anonymous
()
Ответ на: комментарий от OxiD

Вообщем вот это работает

qr/(?ms)(?<!\\)".*?(?<!\\)"/

OxiD ★★★★
() автор топика
Ответ на: комментарий от anonymous

Имеено так я и поступил, спасибо мой анонимный друг ))

OxiD ★★★★
() автор топика

Для питона так:

re.cimpile(r'".*?(?:\".*?)*"', re.DOTALL)

Переделай по аналогии в перл.

anonymous
()
Ответ на: комментарий от anonymous

Это тоже не очень хорошо - обычно вместе с \" желательно уметь понимать и \\. Но тогда на строке "asdf\\" регексп не сработает.

Когда у меня возникла эта проблема, я так и не смог разобраться, можно ли это как-то решить регэкспами вообще.

alexsaa
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.