具有json内容的Preg_match html属性

时间:2014-11-29 16:01:20

标签: javascript php html json

我正在尝试获取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值的直接方法,你会怎么做?

2 个答案:

答案 0 :(得分:1)

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

$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"}""
}

答案 1 :(得分:1)

可以尝试以下内容:

$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"}

Regex Demo