用于在html内取消某些语法的正则表达式替代

时间:2019-10-15 11:19:56

标签: php preg-match-all substr strpos

我有函数,并放在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

您可以在regex测试器中查看详细信息: https://regex101.com/r/HdCeeV/1

当前,我发现php中的preg_match_all函数不适用于长字符串。因此,如果函数内的html代码太长,则无法使用此正则表达式。我需要捕获函数名称,函数参数和函数内的html字符串。此正则表达式有其他选择吗?也许使用PHP文件功能,例如substr,strpos等?

1 个答案:

答案 0 :(得分:1)

这是您的正则表达式的改进,效率更高:

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

Demo & Explanation