Помогите разобраться с регулярными выражениями.
Как сделать подстановку частей?
Покажите примерчик, не тривиальной операции, с эхотажным синтаксисом.
regsub ?switches? exp string subSpec ?varName?
If subSpec contains a ``&'' or ``\0'', then it is replaced in the substitution
with the portion of string that matched exp. If subSpec contains a ``\n'',
where n is a digit between 1 and 9, then it is replaced in the substitution
with the portion of string that matched the n-th parenthesized subexpression of
exp. - не могу правильно это истолковать
set ori {bla<a>pervyj</a>abla}
regsub "(<a>).*(</a>)" $ori {\1<b>\2</b>} rez
как получит вот это : bla<b>pervyj</b>abla
SP> Здpавствуй очень уважаемый All ...
SP> Помогите разобраться с регулярными выражениями.
SP> Как сделать подстановку частей?
SP> Покажите примерчик, не тривиальной операции, с эхотажным синтаксисом.
SP> regsub ?switches? exp string subSpec ?varName?
SP> If subSpec contains a ``&'' or ``\0'', then it is replaced in the substitution
SP> with the portion of string that matched exp. If subSpec contains a ``\n'',
SP> where n is a digit between 1 and 9, then it is replaced in the substitution
SP> with the portion of string that matched the n-th parenthesized subexpression of
SP> exp. - не могу правильно это истолковать
SP> set ori {bla<a>pervyj</a>abla}
SP> regsub "(<a>).*(</a>)" $ori {\1<b>\2</b>} rez
SP> как получит вот это : bla<b>pervyj</b>abla
Скобочки надо ставить не вокруг тегов, а между ними. Но в общем виде
HTML/XML регекспами не разбирается.
Данный случай, впрочем, тривиален, и пишется совсем по-другому:
regsub "<(/?)a>" $ori {<\1b>} rez
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
... и углупился в свои мысли
Кнышев
В моем случае это
regsub "(<a>)(.*)(</a>)" $ori {<b>\2</b>} m0
точнее
set ori {bla<AA aa=aaaa aaa=aaaaa>oooo<a q="pervyj"
aaaa=aaaaaa>ooo</a>ooo</AA>abla}
regsub "(<AA.*q=\")(.*)(\" aaaa=.*</AA>)" $ori {<b o=ooo Q="./\2"></b>} m0
наконец то до меня дошло смысл этой туманной формулировки ", then it is
replaced in the substitution with the portion of string that matched the n-th
parenthesized subexpression of exp."
А как собрать множество всех подстрок текста соответствующих выражению?
regexp - дает первую попавшуюся.
особенно если структуры у текста нету или заранее неизвестна
Думаю переходить на Перл или нет.
SP> Здpавствуй очень уважаемый Artem ...
SP> 22 Фев 07 19:46, Artem Chuprina wrote to Slava Pikarevskij-Ushakov:
AC>> Скобочки надо ставить не вокруг тегов, а между ними. Hо в общем виде
AC>> HTML/XML регекспами не разбирается.
AC>> Данный случай, впрочем, тривиален, и пишется совсем по-другому:
AC>> regsub "<(/?)a>" $ori {<\1b>} rez
SP> ну это я привел к тривиальному, суть не в этом, а в том как выглядит не
SP> тривиальное выражение с эхотажным синтаксисом.
SP> В моем случае это
SP> regsub "(<a>)(.*)(</a>)" $ori {<b>\2</b>} m0
SP> точнее
SP> set ori {bla<AA aa=aaaa aaa=aaaaa>oooo<a q="pervyj"
SP> aaaa=aaaaaa>ooo</a>ooo</AA>abla}
SP> regsub "(<AA.*q=\")(.*)(\" aaaa=.*</AA>)" $ori {<b o=ooo Q="./\2"></b>} m0
SP> наконец то до меня дошло смысл этой туманной формулировки ", then it is
SP> replaced in the substitution with the portion of string that matched the n-th
SP> parenthesized subexpression of exp."
SP> А как собрать множество всех подстрок текста соответствующих выражению?
SP> regexp - дает первую попавшуюся.
SP> особенно если структуры у текста нету или заранее неизвестна
SP> Думаю переходить на Перл или нет.
Бессмысленно. Там тоже надо документацию читать.
--all --inline.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Чем отличается свобода от независимости?
Независимость - это когда за тебя не платят.
А свобода - когда за тебя не думают.
SP>> Думаю переходить на Перл или нет.
AC> Бессмысленно. Там тоже надо документацию читать.
Это точно. :)
А какого на эхотаге веб программирование?
Существуют ли хостинг с поддержкой эхотага?
AC> --all --inline.
О, а тсл 8.0 таких фич еще не умел.
Веб-программирование как web-программирование. Берешь пакет ncgi из
tcllib и веб-программируешь. А то вообще можно tclhttpd взять.
SPU> хостинг с поддержкой эхотага?
Практически на любом хостинге с поддержкой cgi какой-нибудь tclsh да
завалялся. Обычно, правда, древний. На agave вон 8.4.2 опытным путем
обнаружен. tcllib скорее всего не будет. Придется её к себе в HOME
ставить и не забывать правильный auto_path в каждом скрипте прописывать.
Найти хостинг с поддержкой mod_dtcl в апаче - это уже сложнее. Но на мой
взгляд, mod_dtcl вообще вещь близкая к бесполезной. Он не умеет
обрабатывать ранние стадии обработки HTTP-запроса (чем ценен mod-perl),
а врисовывать в HTML Tcl-команды - не есть правильный подход к
web-программированию.
AC>> --all --inline.
SPU> О, а тсл 8.0 таких фич еще не умел.
Ну ты вспомнил - 8.0 - он ещё и русский языка не умел. Лично я уже 8.3
за Tcl не считаю. По причине отсутствия в нем операторов ne, gt etc. А
ведь он уже новый regexp engine имел.
--
... А ночью приходит хариус...
> set ori {bla<a>pervyj</a>abla}
> regsub "(<a>).*(</a>)" $ori {\1<b>\2</b>} rez
> как получит вот это : bla<b>pervyj</b>abla
Если речь о разборе, например, xml или другого языка -- о регулярных
выражениях лучше забыть. Т.е. в теории может и возможно, но на практике
выражения для разбора окажутся исключительно громоздкими. При том, что
оно всё относительно просто описывается на чём-то вроде yacc.