Мне тяжело разобраться с этим. Я работаю с системой пользовательских плагинов, которая представляет такие вещи:
<plugin:class:method var1='hello', var2='yes' />
Но, ': method' и переменные не должны существовать - требуется только 'class'. Для instace все должно быть в порядке:
<plugin:class />
Проблема, с которой я сталкиваюсь, заключается в том, как заставить регулярное выражение возвращать вещи, когда метод и / или переменные не существуют. До сих пор я могу получить результаты, когда все части существуют, но не иначе - это то, где я нахожусь (борясь с первым условным условием):
$f = "/<plugin:(?P<class>\w+)(?(?=^:)?P<method>\w+)\s+(.*)\/>/sUi";
С приведенным ниже кодом все работает очень хорошо, просто нужно вернуть все кусочки с условиями:
preg_replace_callback($f, array($this, 'processing'), $text);
Надеюсь, это имеет какой-то смысл - и даже возможно. Спасибо.