Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Перевод регулярного выражения на Java


Автор: truffle 15.12.2010, 17:19
Помогите записать это выражение на java и понять как его читать?
$var=~s/^{[^}]*}//;

Автор: shamber 15.12.2010, 23:37
эээээ, может в другой раздел форума?

Автор: Logo 16.12.2010, 15:03
Да. Перловый синтаксис здесь означает «заменить первое совпадение выражения "^{[^}]*}" на пустую строку». В Java способ применения регулярного выржения будет зависить от используемой библиотеки. Само выражение скорер всего не изменится (Perl Compatible если), но тоже зависит от библиотеки.

Автор: truffle 16.12.2010, 15:12
Цитата(Logo @ 16.12.2010,  15:03)
Да. Перловый синтаксис здесь означает «заменить первое совпадение выражения "^{[^}]*}" на пустую строку». В Java способ применения регулярного выржения будет зависить от используемой библиотеки. Само выражение скорер всего не изменится (Perl Compatible если), но тоже зависит от библиотеки.

тогда еще вопрос, почему у меня скрипт:
   $var = 'gf^{[^}]*}hdfj';
   $var=~s/^{[^}]*}//;
   print $var;

выводит:

gf^{[^}]*}hdfj

те ничего не поменялось...

Автор: Logo 16.12.2010, 15:37
Код

$var=~s/\^{[^}]*}//;

?

Автор: truffle 16.12.2010, 15:56
Цитата(Logo @ 16.12.2010,  15:37)
Код

$var=~s/\^{[^}]*}//;

?

gf]*}hdfj

Автор: alezzz 16.12.2010, 18:44
Цитата(truffle @  16.12.2010,  15:56 Найти цитируемый пост)
Цитата(Logo @ 16.12.2010,  15:37)код Perl1:$var=~s/\^{[^}]*}//;highlightSyntax('perl_iYjVjY','perl');?gf]*}hdfj



Символ "^" в начале выражения - начало строки, а в квадратных скобках - указывает на символы, которые не должны входить в набор. Т.е. сначало совпал "^" как символ, потом "{", потом последовательность не "}" и в конце нашел "}", т.е. совпало "^{[^}".

чтобы из "gf^{[^}]*}hdfj" получилось "gfhdfj", то можно так:
Код

$var=~s/\^{\[\^}\]\*\}//;

или так
Код

$var=~s/\^.*\}//;


а выражение
Код

$var=~s/^{[^}]*}//;

удаляет часть строки, которая закючена в {} и начинается с начала строки:
Код

$var1 = 'text {tag  tag  tag}text text text {tag}';
$var2 = '{tag  tag  tag}text text text {tag}';
$var1 =~ s/^{[^}]*}//;
$var2 =~ s/^{[^}]*}//;
print $var1, "\n", $var2;

Код

text {tag  tag  tag}text text text {tag}
text text text {tag}


вродебы так smile

Автор: Logo 16.12.2010, 23:08
Или так
Код

$var=~s/\Q^{[^}]*}//; 

Автор: alezzz 17.12.2010, 10:21
но так не хочет, перепробовал разные способы
Код

$var1 = "\Qtext^{[^}]*}text";
$var=~s/\Q^{[^}]*}\E//; 
print $var1, "\n";
$var1 = '\Qtext^{[^}]*}text';
$var=~s/\Q^{[^}]*}\E//; 
print $var1, "\n";
$var1 = "\Qtext^{[^}]*}text";
$var=~/\Q^{[^}]*}\E/; 
print $&, "\n";

Код

text\^\{\[\^\}\]\*\}text
\Qtext^{[^}]*}text


в последнем случае в $& пусто

А вообще помоему регулярное выражения изначально не для этого строилось
Цитата

удаляет часть строки, которая закючена в {} и начинается с начала строки

Автор: Logo 17.12.2010, 10:38
Код

$var=~s/\Q^{[^}]*}//; 

это аналог вашего
Код

$var=~s/\^{\[\^}\]\*\}//;


Цитата

А вообще помоему регулярное выражения изначально не для этого строилось

 Но тс, судя по всему, хочет применит regexp именно для этогоsmile Хотя я тоже не телепат, точно не скажуsmile

Автор: alezzz 17.12.2010, 11:02
ну незнаю....
Код

$var1 = "text^{[^}]*}text";
$var1=~s/\^{\[\^}\]\*\}//;
print $var1, "\n";
$var1 = "text^{[^}]*}text";
$var=~s/\Q^{[^}]*}//; 
print $var1;

Код

texttext
text^{[^}]*}text

по документации должно работать, но не хочет

Автор: alezzz 17.12.2010, 11:23
нашел у себя ошибку
Код

$var1 = 'text^{[^}]*}text';
$var1=~s/\Q^{[^}]*}\E//; 
print $var1;

Код

texttext

работает smile

Автор: truffle 17.12.2010, 12:52
Цитата(alezzz @ 17.12.2010,  10:21)
А вообще помоему регулярное выражения изначально не для этого строилось

А для чего оно еще могло строиться? его можно другим способом прочитать?

Автор: alezzz 17.12.2010, 13:02
Цитата(truffle @  16.12.2010,  15:12 Найти цитируемый пост)
тогда еще вопрос, почему у меня скрипт:
   $var = 'gf^{[^}]*}hdfj';
   $var=~s/^{[^}]*}//;
   print $var;

выводит:

gf^{[^}]*}hdfj

Вот это навело на ложный след smile

Автор: truffle 17.12.2010, 13:03
Вероятность ошибки в выражении исключена. У меня на входе работающий скрипт, в котором есть функция

Код

my ($prop) = @_;
$prop=~s/^{[^}]*}//;
return $prop; 


его(скрипт) надо переписать на яве, вот я и пытаюсь понять, что делает эта функция. 

Автор: alezzz 17.12.2010, 13:07
удаляет в строке все что между {} (и сами скобки тоже), если это стоит в начале строки, т.е. из:
{aaa aaa aaa} bbb bbb bbb {aaa aaa aaa}
получяем:
 bbb bbb bbb {aaa aaa aaa}

что передается через @_?

Автор: truffle 17.12.2010, 13:23
Спасибо!
была ошибка

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)