|
|
|
| Можно ли как-нибудь узнать количество вхождения подмаски изнутри рег. выражения?
Например, нужно чтобы количество букв "a" до " bla bla bla " было равно кочичеству букв "b" после него...
Конечно, их количество может меняться.
<?php
$text = 'aaaaaaaa bla bla bla bbbbbbbb';
// в идеале хотелось бы вот так (т.е. буквы не стоят вряд)
// $text = 'a-aaa-aaa-a bla bla bla b-bb-bbbb-b';
if (preg_match("", $text))
echo 'Количество букв совпадает';
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(21.06.2007 в 09:52)
| | Скорее всего извлекать придётся в PHP и сравнивать уже в скрипте
<?php
$text = 'aaaaaaaa bla bla bla bbbbbbbb';
// в идеале хотелось бы вот так (т.е. буквы не стоят вряд)
// $text = 'a-aaa-aaa-a bla bla bla b-bb-bbbb-b';
$pattern = "|([^\s]+)[\s]bla bla bla[\s]([^\s]+)|is";
if (preg_match($pattern, $text, $out))
{
if(strlen($out[1]) == strlen($out[2]))
echo 'Количество букв совпадает';
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.06.2007 в 10:36)
| | Это, конечно, вариант, но хочется именно рег. выражением проверить.
Вообще-то нужно не именно количество букв сосчитать, а проверить чтобы каждому "а" соответствовал свой "b". (открытый - закрытый тег)
"bla bla bla" можно заменить на что-нибудь другое, чтобы там не встречалось букв "а" и "b".
Вооот...
Ломаю голову над рекурсивными шаблонами, кое-чего никак не могу додумать:
<?php
$text = 'aaaa texttext bbbbbbbbbbbbbbbbb';
if (preg_match("#a((?>[^ab]+)|(?R))*b#", $text, $regs))
echo $regs[0];
?>
|
В $regs[0] попадает строка "aaaa texttext bbbb" - b столько же, сколько и a.
Остается проверить кончается ли на этом строка? ...
Но как это сделать, никак не соображу :(
(банально добавить $ не получится) | |
|
|
|