Альтернативное регулярное выражение для удаления определенного синтаксиса в HTML - PullRequest
0 голосов
/ 15 октября 2019

У меня есть функции и помещены в HTML-код. Эти функции имеют следующие правила синтаксиса:

  1. Существует символ «#» в качестве открытого тега
  2. После открытого тега «#» есть имя функции. Имя функции может содержать число (1,2,3), алфавит (a, b, c) и подчеркивание (_).
  3. После имени функции есть пара скобок, содержащих параметр. Параметр может содержать все, что угодно, включая буквенно-цифровой, арифметический оператор (<,>, = ,!), и это: @, ​​#, $,%, ^, &, (,),?, *, /, [,]
  4. После параметра есть html-код, который помещается внутри фигурной скобки.
  5. Окончательно функция закрыта с помощью тега #.

Это не мой настоящийфункция, но она дает общее представление о правилах выше:

<html>
#v123w(r(!@3o=?w){
<div></div>
}#
#131ie_w(13gf$>&*()(*&){
<div></div>
}#
</html>

Все это время я использую это регулярное выражение для захвата всех имен функций, параметров и строк html внутри функций:

#(\w+)\(*([\w\d\s\=\>\<\[\]\"\'\)\(\&\|\*\+\-\%\@\^\?\/\$\.\!]*)\)\)*{((?:(?R)|.)*?)}#

Это результат:

enter image description here

Вы можете увидеть детали в тестере регулярных выражений: https://regex101.com/r/HdCeeV/1

В настоящее время я обнаружил, что функция preg_match_all в php не работает для длинной строки. Таким образом, я не могу использовать это регулярное выражение, если HTML-код внутри функции слишком длинный. Мне нужно захватить имя функции, параметр функции и строку html внутри функции. Есть ли альтернатива этому регулярному выражению? Может быть, использовать функцию файла PHP, например substr, strpos и т. Д.?

1 Ответ

1 голос
/ 15 октября 2019

Вот улучшение вашего регулярного выражения, немного более эффективное:

#(\w+)\(([\w\s=><[\]"')(&|*+%@^?\/$.!-]*)\){(.+?)}#

Демонстрация и объяснение

...