LINUX.ORG.RU

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

alix ★★★★
()

Все ораторы выше невесть какие спецы, что даже не могут внятно ответить.

Может кому понадобится.

$ echo "123\"ads\\\"asd\"456\"AAAA\"241890124908124908\"asdasd\\\"asdasd\\\"\"" | grep -E '\"([^\"]|\\\")*\"' --color -o
"ads\"asd"
"AAAA"
"asdasd\"asdasd\""
bk_ ★★
() автор топика
Ответ на: комментарий от anonymous

Неверное решение. Я получу _все_ строки вместо тех, которые есть только у меня в сорцах.

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

ответ неверный. контрпример:

// char *s="old variant";
char *s="new
variant"; /* mb "variant2"? */

#define S(x) ("invar"#x)

char s2[]=S(2);
char s3[3]={'a','"','b','"',0};

и которые строки должны вытащиться по замыслу ?

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

этож придецо парсер на bison

точнее лексер на flex`e (что в принципе быстро пишется) или, как заметили ранее, выдергивать строки из объектников.

p.s. (как подсказка) фэны lor-wiki могли бы и вытащить lex+bison|lemon описания популярных языков

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

Дядя, ты попутал php и С. Переменная s так не может быть объявлена.

А строки я вытаскиваю для локализации.

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

Литеральная строковая константа у тебя всего одна. Она и вытащится. Затрудняюсь интерпретировать «строки C» как-то иначе в контексте вопроса.

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

grep не ведает про «литеральные строковае константы C» поэтому он тупо вытащит текст между парными неэкранированными кавычками

предложенным ТС способом тянутся якобы «строки» - из комментариев, из defines, просто код между парными '«'; при этом конкатенация и перенос строк игнорируются.

впрочем ТС`у видимо этого хватило.

MKuznetsov ★★★★★
()
Ответ на: комментарий от geekless

У меня проект уже написан. И gettext на моей платформе нет.

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

Прошлый regex спотыкался на экранировании всего, кроме кавычек. Этот работает верно.

grep -E '\"([^\"]|\\.)*\"' --color -o
bk_ ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.