我正在尝试在 JS 代码的两个字符串之间存在内容:
strs += '<span>';
strs += '17S32 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'
strs += '17S33 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'
strs += '</span>';
我尝试了以下不成功的方法:
preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);
我想要的结果是一个包含以下内容的数组:
array(
0 => '17S32 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA',
1 => '17S33 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'
)
答案 0 :(得分:2)
这里有一些正则表达式的困境:
↓ ↓ ↓
preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);
+
需要转义.
要求#s
标记与换行符匹配"
双引号,以避免转义单引号。尽管如此,仅提取文本并不能提供所需的列表。一个更简单的方法就是寻找真正的字符串附加数据 - 假设它有些一致:
preg_match_all("/^\s*strs \+= '((?!<).+)'/m", $src, $matches);
(?!<)
只是排除<span>
之类的内容。您可以为预期的字符串内容执行更多白名单。显然,这只有在文本有些一致的情况下才能实现,不会非常尊重JS语法等等。 - 但总的来说,这是我认为更简单的方法。