Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

regsub "(<a>).*(</a>)" $ori \1<b>\2</b>

0 views
Skip to first unread message

Slava Pikarevskij-Ushakov

unread,
Feb 21, 2007, 7:17:14 PM2/21/07
to
Здpавствуй очень уважаемый All ...

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

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


Artem Chuprina

unread,
Feb 22, 2007, 11:46:08 AM2/22/07
to
Slava Pikarevskij-Ushakov -> All @ Thu, 22 Feb 2007 03:17:14 +0300:

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

... и углупился в свои мысли
Кнышев

Slava Pikarevskij-Ushakov

unread,
Feb 24, 2007, 6:08:29 AM2/24/07
to
Здpавствуй очень уважаемый Artem ...
22 Фев 07 19:46, Artem Chuprina wrote to Slava Pikarevskij-Ushakov:
AC> Скобочки надо ставить не вокруг тегов, а между ними. Hо в общем виде
AC> HTML/XML регекспами не разбирается.
AC> Данный случай, впрочем, тривиален, и пишется совсем по-другому:
AC> regsub "<(/?)a>" $ori {<\1b>} rez
ну это я привел к тривиальному, суть не в этом, а в том как выглядит не
тривиальное выражение с эхотажным синтаксисом.

В моем случае это
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 - дает первую попавшуюся.
особенно если структуры у текста нету или заранее неизвестна

Думаю переходить на Перл или нет.


Slava Pikarevskij-Ushakov

unread,
Feb 24, 2007, 5:55:49 AM2/24/07
to

Artem Chuprina

unread,
Feb 25, 2007, 6:26:31 AM2/25/07
to
Slava Pikarevskij-Ushakov -> Artem Chuprina @ Sat, 24 Feb 2007 14:08:29 +0300:

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

Чем отличается свобода от независимости?
Независимость - это когда за тебя не платят.
А свобода - когда за тебя не думают.

Slava Pikarevskij-Ushakov

unread,
Feb 25, 2007, 4:37:34 PM2/25/07
to
SP>> А как собрать множество всех подстрок текста соответствующих
SP>> выражению? regexp - дает первую попавшуюся. особенно если
SP>> структуры у текста нету или заранее неизвестна

SP>> Думаю переходить на Перл или нет.

AC> Бессмысленно. Там тоже надо документацию читать.
Это точно. :)

А какого на эхотаге веб программирование?
Существуют ли хостинг с поддержкой эхотага?

AC> --all --inline.
О, а тсл 8.0 таких фич еще не умел.

Victor Wagner

unread,
Feb 26, 2007, 4:14:39 AM2/26/07
to
Slava Pikarevskij-Ushakov
<Slava.Pikare...@p33.f553.n463.z2.fidonet.org>
wrote:

SP>>> А как собрать множество всех подстрок текста
SP>>> соответствующих выражению? regexp - дает первую
SP>>> попавшуюся. особенно если структуры у текста нету или
SP>>> заранее неизвестна
SP>>> Думаю переходить на Перл или нет.
AC>> Бессмысленно. Там тоже надо документацию читать.
SPU> Это точно. :)
SPU> А какого на эхотаге веб программирование? Существуют ли

Веб-программирование как 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 имел.

--
... А ночью приходит хариус...

Kirill Frolov

unread,
Feb 26, 2007, 4:55:29 PM2/26/07
to
On Thu, 22 Feb 2007 03:17:14 +0300, Slava Pikarevskij-Ushakov wrote:

> set ori {bla<a>pervyj</a>abla}
> regsub "(<a>).*(</a>)" $ori {\1<b>\2</b>} rez
> как получит вот это : bla<b>pervyj</b>abla

Если речь о разборе, например, xml или другого языка -- о регулярных
выражениях лучше забыть. Т.е. в теории может и возможно, но на практике
выражения для разбора окажутся исключительно громоздкими. При том, что
оно всё относительно просто описывается на чём-то вроде yacc.

0 new messages