У меня есть функции и помещены в HTML-код. Эти функции имеют следующие правила синтаксиса:
- Существует символ «#» в качестве открытого тега
- После открытого тега «#» есть имя функции. Имя функции может содержать число (1,2,3), алфавит (a, b, c) и подчеркивание (_).
- После имени функции есть пара скобок, содержащих параметр. Параметр может содержать все, что угодно, включая буквенно-цифровой, арифметический оператор (<,>, = ,!), и это: @, #, $,%, ^, &, (,),?, *, /, [,]
- После параметра есть html-код, который помещается внутри фигурной скобки.
- Окончательно функция закрыта с помощью тега #.
Это не мой настоящийфункция, но она дает общее представление о правилах выше:
<html>
#v123w(r(!@3o=?w){
<div></div>
}#
#131ie_w(13gf$>&*()(*&){
<div></div>
}#
</html>
Все это время я использую это регулярное выражение для захвата всех имен функций, параметров и строк html внутри функций:
#(\w+)\(*([\w\d\s\=\>\<\[\]\"\'\)\(\&\|\*\+\-\%\@\^\?\/\$\.\!]*)\)\)*{((?:(?R)|.)*?)}#
Это результат:
![enter image description here](https://i.stack.imgur.com/T9S0V.jpg)
Вы можете увидеть детали в тестере регулярных выражений: https://regex101.com/r/HdCeeV/1
В настоящее время я обнаружил, что функция preg_match_all в php не работает для длинной строки. Таким образом, я не могу использовать это регулярное выражение, если HTML-код внутри функции слишком длинный. Мне нужно захватить имя функции, параметр функции и строку html внутри функции. Есть ли альтернатива этому регулярному выражению? Может быть, использовать функцию файла PHP, например substr, strpos и т. Д.?