用于在 html 中抓取某些语法的正则表达式替代方案

Regular expression alternative for scraping certain syntax inside html

我有函数并放置在 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)|.)*?)}#

这是结果:

您可以在正则表达式测试器中查看详细信息: https://regex101.com/r/HdCeeV/1

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

这是对你的正则表达式的改进,效率更高了一点:

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

Demo & Explanation