Forum Webscript.Ru

Программирование => Perl => Тема начата: race1 от 09 Мая 2006, 06:48:17

Название: RegExp кол-во вхождений
Отправлено: race1 от 09 Мая 2006, 06:48:17
Можно как-нибудь узнать кол-во вхождений чего-то в регулярных выражениях? Это нужно для поиска открытых и не закрытых тегов html. Например, человек написал \'bold\' и забыл закрыть тэг. А я смотрю потом что открытывающих тегов 1, а закрывающих 0 и добавляю закрывающий \'\'.
Название: RegExp кол-во вхождений
Отправлено: vladsu от 09 Мая 2006, 07:26:46
Если есть желание сэкономить время, наше и свое, то:
http://www.w3.org/People/Raggett/tidy/ (http://www.w3.org/People/Raggett/tidy/)
http://www.w3.org/QA/Tools/ (http://www.w3.org/QA/Tools/)
есть и другие, гугл Вам в руки.
Название: RegExp кол-во вхождений
Отправлено: xames от 12 Мая 2006, 20:46:01
$data=~s##$open++#ge;
$data=~s#
#$close++#ge;

if($open != $close) ....
Название: RegExp кол-во вхождений
Отправлено: Zerokool от 17 Мая 2006, 02:22:58
xames, все верно, но медленно.
while ($data =~ m ~~g) { ++open; }
так в 3-5 раз быстрее.

P.S. Извини. Вы@бываюсь, конечно :)
Название: RegExp кол-во вхождений
Отправлено: xames от 17 Мая 2006, 11:43:34
$count = ($data =~ m ~~g)
Название: RegExp кол-во вхождений
Отправлено: Zerokool от 17 Мая 2006, 14:39:20
xames, все верно. то же что и у меня. Согласитесь, что Перл потрясающий инструмент.
Название: RegExp кол-во вхождений
Отправлено: xames от 18 Мая 2006, 07:23:58
Немного тестов:

timethese (10_000_000,{
   \'A\' => q|while ($data =~ m ~~g) { ++$open; }|,
   \'B\' => q|while ($data =~ m ~~go) { ++$open; }|,
   \'C\' => q|$count = ($data =~ m ~~g)|,
   \'D\' => q|$count = ($data =~ m ~~go)|});

Benchmark: timing 10000000 iterations of A, B, C, D...
         A:  5 wallclock secs ( 6.10 usr + -0.01 sys =  6.09 CPU) @ 1642305.80/s
 (n=10000000)
         B:  6 wallclock secs ( 6.09 usr +  0.00 sys =  6.09 CPU) @ 1642036.12/s
 (n=10000000)
         C:  3 wallclock secs ( 4.61 usr +  0.01 sys =  4.62 CPU) @ 2165908.60/s
 (n=10000000)
         D:  3 wallclock secs ( 4.56 usr +  0.00 sys =  4.56 CPU) @ 2194426.16/s
 (n=10000000)

=))
Название: RegExp кол-во вхождений
Отправлено: Zerokool от 18 Мая 2006, 13:30:56
xames, ты был прав, а я нет. спасибо, что вправил мозги. я был обманут справочником. сам виноват. нужно было самому постараться с бэнчем, а не вас грузить. короче, извиняюсь.