The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"rexepr in variable"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 22-Сен-04, 21:44  (MSK)
проблемка при работе с регехпами, которые хрянятся в переменной.
те-
$text =~  s!\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]!<a herf=$1>$1</a>!gi;
так работает;

а так -
my $expr = '\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]';
my $tr = '<a herf=$1>$1</a>';
$text =~ s!$expr!$tr!gi;

заменяет на '<a herf=$1>$1</a>';

Спасибо всем, кто откликнется.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "rexepr in variable"
Сообщение от Brainbug Искать по авторуВ закладки(ok) on 23-Сен-04, 10:01  (MSK)
>проблемка при работе с регехпами, которые хрянятся в переменной.
>те-
>$text =~  s!\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]!<a herf=$1>$1</a>!gi;
>так работает;
>
>а так -
>my $expr = '\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]';
>my $tr = '<a herf=$1>$1</a>';
>$text =~ s!$expr!$tr!gi;
>
>заменяет на '<a herf=$1>$1</a>';
>
>Спасибо всем, кто откликнется.


#!/usr/local/bin/perl -w
$t="test";
my $test="<a href=$t>$t</a>";
print $test,"\n";
exit 0;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 23-Сен-04, 16:09  (MSK)
не то :)
проблемма в том, что СНАЧАЛА определяются "темлейты"
а потом они оббрабатываются regexpr
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "rexepr in variable"
Сообщение от Brainbug Искать по авторуВ закладки(ok) on 23-Сен-04, 16:45  (MSK)
>не то :)
>проблемма в том, что СНАЧАЛА определяются "темлейты"
>а потом они оббрабатываются regexpr
A tak:
[root@test perl]# cat 021.pl
#!/usr/local/bin/perl -w

$t="\^test.\$";
open FH,"test";
while (<FH>){
        print if /$t/;
}
close FH;
[root@test perl]# cat test
tst
test1
test2
tst3
test5
test6
test123
[root@test perl]# ./021.pl
test1
test2
test5
test6

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 23-Сен-04, 17:11  (MSK)
ещё раз нет. реальная ситуация в коде выглядит так:

my (@expr, @tr );
....
push @expr, '\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]';
push @tr, '<a herf=$1>$1</a>';
push @expr, '\[url\]((www|ftp)\.([\w\-]+\.)*?[\w\-]+\.[a-z]{2,4}(:?[0-9]*?/[^ \"\n\r\t<]*)?)\[/url\]';
push @tr, '<a herf=$1>$1</a>';
.....
sub pasre
{
my $text = $_[0];
my $i = 0;
foreach (@expr)
    {
    $text =~ s/$expr[$i]/$tr[$i]/gi;
    $i++;
    }
return $text;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "rexepr in variable"
Сообщение от Brainbug Искать по авторуВ закладки(ok) on 23-Сен-04, 17:47  (MSK)
>ещё раз нет. реальная ситуация в коде выглядит так:
>
>my (@expr, @tr );
>....
>push @expr, '\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]';
>push @tr, '<a herf=$1>$1</a>';
>push @expr, '\[url\]((www|ftp)\.([\w\-]+\.)*?[\w\-]+\.[a-z]{2,4}(:?[0-9]*?/[^ \"\n\r\t<]*)?)\[/url\]';
>push @tr, '<a herf=$1>$1</a>';
>.....
>sub pasre
>{
>my $text = $_[0];
>my $i = 0;
>foreach (@expr)
>    {
>    $text =~ s/$expr[$i]/$tr[$i]/gi;
>    $i++;
>    }
>return $text;
>}
Nu a tak:
[root@test perl]# cat 021.pl
#!/usr/local/bin/perl -w

my (@expr,@replace);
push @expr,"\^test.\$";
push @expr,"\^tst\$";
push @replace,"t";
push @replace,"r";
open FH,"test";
while (<FH>){
        foreach $te(@expr){
                if (/$te/) {
                        s/$te/$replace[$i]/gi;
                        print $_;
                }
                $i++;
        }
} continue {
$i=0;
}
close FH;
[root@test perl]# cat test
tst
test1
test2
tst3
test5
test6
test123
[root@test perl]# ./021.pl
r
t
t
t

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 23-Сен-04, 20:24  (MSK)
и опять не то :)))
проблемма в том, что в $replace нужно использовать  части заменяемого
те [url]http://ya.ru[/url] заменися на <a href="http://ya.ru">http://ya.ru</a>

для этого в строке подстоновки использууются перенменные $1, $2 и т.д.
но! если строку подстоновки брать из перменной, но $1 интерпритируется не как переменная, а как '$1'
это и нужно решить

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "rexepr in variable"
Сообщение от ihor Искать по авторуВ закладки on 24-Сен-04, 01:33  (MSK)
man perlop
на предмет qr
  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 24-Сен-04, 04:38  (MSK)
и ещё раз нет;
цитируюю ман:
========BEGIN===========
For example,
$rex = qr/my.STRING/is;
s/$rex/foo/;
=========END============

нужно:
$replace = '$2 - $1';
$text = 'test1 test2';
$text =~ s/([\w+]) ([\w+])/$replase/gi;

получается $text = '$2 - $1' те переменные в строке замены не интрпритирутся как переменные

нужно $text = 'test2 test1'

PS видемо я не правильно сформулировал сабж

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "rexepr in variable"
Сообщение от Brainbug Искать по авторуВ закладки(ok) on 24-Сен-04, 10:13  (MSK)
>и ещё раз нет;
>цитируюю ман:
>========BEGIN===========
>For example,
>$rex = qr/my.STRING/is;
>s/$rex/foo/;
>=========END============
>
>нужно:
>$replace = '$2 - $1';
>$text = 'test1 test2';
>$text =~ s/([\w+]) ([\w+])/$replase/gi;
>
>получается $text = '$2 - $1' те переменные в строке замены не
>интрпритирутся как переменные
>
>нужно $text = 'test2 test1'
>
>PS видемо я не правильно сформулировал сабж

Da ne ispolzui ' a ".

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 24-Сен-04, 19:18  (MSK)
>Da ne ispolzui ' a ".
тогда получится, что переменные бдут присваиваться при присвоении.
те
$replace = "$2 - $1";
станет $replace = ' - ';
или, если экранировать переменные так \$1, то ситуация будет как с однинарными кавычками

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 24-Сен-04, 23:34  (MSK)
В ообщем я обошел эту необходимость в коде другми средствами.
Но, все-таки, интерено. есть-ли способ при отращении к переменной подставлять в неё записаанные в ней перемнные


  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "rexepr in variable"
Сообщение от konst emailИскать по авторуВ закладки(??) on 27-Сен-04, 19:43  (MSK)
>В ообщем я обошел эту необходимость в коде другми средствами.
>Но, все-таки, интерено. есть-ли способ при отращении к переменной подставлять в неё
>записаанные в ней перемнные
$text =~ s/([\w+]) ([\w+])/$replase/gi;
eval("\$text =~ s/([\w+]) ([\w+])/$replase/gi;");
  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "rexepr in variable"
Сообщение от rWizard emailИскать по авторуВ закладки(ok) on 27-Сен-04, 22:16  (MSK)
и ещё рвз нет!
может я чего не понимаю, но как пметить ваш совет к ситуации

my $replace = '$2 test $1'
my $text = '123 321';
$text =~ s/(\d+) (\d+)/$replace/gi;
нужно что-бы
$text == '321 test 123'
а получается $text == '$2 test $1'

нужно "резолвить" перевенные, которые записанны в переменной.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "rexepr in variable"
Сообщение от konst emailИскать по авторуВ закладки(??) on 28-Сен-04, 12:29  (MSK)
>и ещё рвз нет!
>может я чего не понимаю, но как пметить ваш совет к ситуации
>
>
>my $replace = '$2 test $1'
>my $text = '123 321';
>$text =~ s/(\d+) (\d+)/$replace/gi;
>нужно что-бы
>$text == '321 test 123'
>а получается $text == '$2 test $1'
>
>нужно "резолвить" перевенные, которые записанны в переменной.

man perlre
В вашем случае переменные действительно не будут подставляться. Так как эта подстановка произойдет уже после анализа 1-й частиЖ
ВОТ ЧТО РАБОТАЕТ:
$a = '$1 - $2';
$t = "123 124";
print "$t\n";
eval ("\$t =~ s/(\\d+) (\\d+)/$a/;");

print "$t\n";

  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "rexepr in variable"
Сообщение от mirya emailИскать по авторуВ закладки on 02-Окт-04, 20:00  (MSK)
$subst = '$1, $2 and others...';

# better would be
$text =~ s/$my_regex/eval('"$substr"')/e;

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру