parser


 

 
   команды управления поиском

похоже, кажется, видимо...

Maxx 21.07.2016 04:10

по факту вы не понимаете вообще о чем эти каракули.
$str[/A/B/C/D//F////G]

^str.match[^^[^^/]+/[^^/]+/(.*)^$][]{$match.1}
Работает это примерно так - регекс-машина берет написанный вами шаблон и сверяет его со строкой
1. ^^ - текс, начало строки, занимаем позицию
2. [^^/] - ага, у нас тут символ, точнее любой кроме этого (кроме слеша)
3. + - и символов этих должно быть как минимум один
4. берем первый символ строки (/) - не совпадает, поиск закончен, дальше даже не пробуем.

Когда вы + меняете на *:
1, 2 - тоже самое
3. * символ может быть, а может и нет..
4. берем первый символ строки (/) - не совпадает, да ну и фиг с ним, нам же дядя программист сказал, что это не обязательно, идем дальше
5. / - должен быть слеш, есть, как раз в начале строки, дальше
6. [^^/]* - аналогичная группа, но тут уже совпадение нашлось (A), идем дальше
7. / - ну вроде тоже есть, дальше
8. (.*) - о, а тут пофиг что (а может и вообще ничего *), но до конца строки и положить в переменную (попадет в $match.1)

тут сразу видно, что строгость первого выражения по сути отловила вам ошибку, в которой вы не стали разбираться (надо то всего лишь / в начало регулярки поставить), а просто уменьшили строгость выражения. Так делать не стоит, к тому же все эти "может быть, а может и нет" (*) довольно ощутимо понижают производительность регулярки