Forum Webscript.Ru
Программирование => Perl => Тема начата: race1 от 09 Мая 2006, 06:48:17
-
Можно как-нибудь узнать кол-во вхождений чего-то в регулярных выражениях? Это нужно для поиска открытых и не закрытых тегов html. Например, человек написал \'bold\' и забыл закрыть тэг. А я смотрю потом что открытывающих тегов 1, а закрывающих 0 и добавляю закрывающий \'\'.
-
Если есть желание сэкономить время, наше и свое, то:
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/)
есть и другие, гугл Вам в руки.
-
$data=~s##$open++#ge;
$data=~s##$close++#ge;
if($open != $close) ....
-
xames, все верно, но медленно.
while ($data =~ m ~~g) { ++open; }
так в 3-5 раз быстрее.
P.S. Извини. Вы@бываюсь, конечно :)
-
$count = ($data =~ m ~~g)
-
xames, все верно. то же что и у меня. Согласитесь, что Перл потрясающий инструмент.
-
Немного тестов:
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)
=))
-
xames, ты был прав, а я нет. спасибо, что вправил мозги. я был обманут справочником. сам виноват. нужно было самому постараться с бэнчем, а не вас грузить. короче, извиняюсь.