потому, что вы городите никому не нужный огород. Видимо за этот год работы с парсером вы прочли только класс string. Ну возьмите вы и прочитайте документацию от начала и до конца со всеми приложениями. Ну никогда я не поверю, что человек работающий на парсере год напишет вместо \b \<, вместо [gi] [g,i]...
ну а вот это уже беспредел :)) сравните вы написали: $a[^eval($a+1)] можно было: $a($a + 1)