|
|
|
|
<?php
preg_match_all('/a*|b*/', 'aaabbbccc', $r);
print_r($r);
//ожидаеться
/* Array
(
[0] => Array
(
[0] => aaa
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
)
)*/
//реально возвращает
/* Array
(
[0] => Array
(
[0] => aaa
[1] =>
[2] => bbb
[3] =>
[4] =>
[5] =>
[6] =>
)
)*/
?>
|
То есть если не обращать внимание на пустые ячейки, то найти должно было только ааа так как квантификатор * позволяет пройти пустым, и второе условие никогда не должно было выполниться.
PCRE_VERSION 8.12 2011-01-15
PHP 5.3.5-1ubuntu7.3 with Suhosin-Patch (cli) (built: Oct 13 2011 21:56:07) | |
|
|
|
|
|
|
|
для: duhon
(23.11.2011 в 12:58)
| | только что родилось очень бредовое мысль.
что если механизм получая совпадение с пустотой позицией запоминает место и отработанный шаблон, после сдвиг не происходит, так как курсор остался на том же месте, и опять пытается выполниться тот же шаблон в том же месте, и регулярка что бы не зациклиться делает искусственный переход к следующему символу, НО предусмотрительно проверив альтернативы, в данном случае это b*
хотя эту теорию я даже не знаю как проверить | |
|
|
|
|
|
|
|
для: duhon
(23.11.2011 в 12:58)
| | Как раз на пустые ячейки и нужно обращать внимание - в них ответ, сколько удачных попыток было применить регулярное выражение, вот эти попытки
(aaa)bbbccc - [0]
aaa()bbbccc - [1]
aaa(bbb)ccc - [2]
aaabbb()ccc - [3]
aaabbbc()cc - [4]
aaabbbcc()c - [5]
aaabbbccc() - [6]
|
| |
|
|
|
|
|
|
|
для: cheops
(23.11.2011 в 13:35)
| | это я знаю :)
и ожидаю такое
(aaa)bbbccc - [0]
aaa()bbbccc - [1]
aaab()bbccc - [2]
aaabb()bccc - [3]
aaabbb()ccc - [4]
aaabbbc()cc - [5]
aaabbbcc()c - [6]
aaabbbccc() - [7]
|
так как начиная с позиции [1] первый слева шаблон a* всегда возвращает true, и в теории никакая сила не должна была заставить выполнить шаблон b* | |
|
|
|
|
|
|
|
для: duhon
(23.11.2011 в 14:58)
| | У них два режима: они либо жадные, либо не жадные... По умолчанию жадные, т.е. если они видят b, а за ним еще bb - не могут с собой ничего поделать, тут же захватывают столько, сколько есть. А вот если инвертировать жадность, то картина будет другая - они будут по одному символу вперед продвигаться
(
[0] => Array
(
[0] =>
[1] => a
[2] =>
[3] => a
[4] =>
[5] => a
[6] =>
[7] => b
[8] =>
[9] => b
[10] =>
[11] => b
[12] =>
[13] =>
[14] =>
[15] =>
)
)
|
| |
|
|
|
|
|
|
|
для: cheops
(23.11.2011 в 15:17)
| | спасибо за разьяснение | |
|
|
|