两行之间的PHP内容正则表达式

时间:2018-04-29 11:16:46

标签: php regex preg-match

我正在尝试在 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'
)

1 个答案:

答案 0 :(得分:2)

这里有一些正则表达式的困境:

                  ↓              ↓                        ↓
preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);
  • +需要转义
  • .要求#s标记与换行符匹配
  • 从风格上讲,你应该使用最外面的"双引号,以避免转义单引号。

尽管如此,仅提取文本并不能提供所需的列表。一个更简单的方法就是寻找真正的字符串附加数据 - 假设它有些一致:

 preg_match_all("/^\s*strs \+= '((?!<).+)'/m", $src, $matches);

(?!<)只是排除<span>之类的内容。您可以为预期的字符串内容执行更多白名单。显然,这只有在文本有些一致的情况下才能实现,不会非常尊重JS语法等等。 - 但总的来说,这是我认为更简单的方法。