Pregmatch html 属性与 json 内容

Pregmatch html attribute with a json content

本文关键字:json 内容 属性 html Pregmatch      更新时间:2023-09-26

我正在尝试获取html标签属性的内容,但不知何故我无法获取所有内容:

示例 html

 // clipped for brevity
 <a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">
 // some more html

现在我想获取奇怪地使用双引号的 json 对象的所有内容。出于这个原因,我尝试首先获取 data 属性的值,稍后解析 json。

我做了:

preg_match('/< *a[^>]*data-custom *= *["'']?([^"'']*)/i', $re, $matches);
var_dump($matches);

其中$re是上面显示的 HTML。但我得到这个:

array(2) {
   [0]=> string(39) "<a href="someurl/somemore" data-vote="{"
   [1]=> string(1) "{"

你觉得怎么样?另外,如果您碰巧知道一种以更快的方式提取 json 值的直接方法,您会怎么做?

可以尝试如下操作:

$html = '<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}" class="btn">Vote</a>';
preg_match('~'{'s*(.*?)'s*'}~', $html, $m);
$json = $m[0];
print $json;

输出:

{"foo": 0, "bar": "string"}

正则表达式演示

这有效,除非您的链接有更多内容...

$str = '<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">';
preg_match('/< *a[^>]*data-custom=(.*)>/i', $str, $matches);
var_dump($matches);

输出:

array(2) {
  [0]=>
  string(69) "<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">"
  [1]=>
  string(29) ""{"foo": 0, "bar": "string"}""
}