我想要一个正则表达式来查看这样的字符串,从每个注释块中获取“card”值,并且如果存在“disabled”:true或“hide”:true标记,则为TRUE(否则为false)并返回匹配项及其状态的数组。这是字符串的示例:
<!-- wp:genesis-custom-blocks/blockname {
"card":"card name 1",
"boxes":"multiple boxes",
"selected":false,
"hide":true} /-->
more content
<!-- wp:genesis-custom-blocks/blockname {
"card":"card name 2",
"boxes":"multiple boxes",
"selected":false,
"hide":true} /-->
<div>tags, etc</div>
<!-- wp:genesis-custom-blocks/blockname2 {
"card":"card name 4",
"boxes":"multiple boxes",
"selected":false,
"hide":true} /-->
<!-- wp:genesis-custom-blocks/blockname10 {
"selected":false} /-->
<!-- wp:genesis-custom-blocks/blockname2 {
"card":"card name 6",
"selected":false} /-->
other content
<!-- wp:genesis-custom-blocks/blockname2 {
"card":"card name 5",
"boxes":"multiple boxes",
"selected":false,
"disabled":true} /-->
<!-- wp:genesis-custom-blocks/blockname2 {
"card":"card name 5",
"boxes":"multiple boxes",
"selected":false} /-->
例如对于上面的字符串我想要:
[
["card name 1", true],
["card name 2", true],
["card name 4", true],
["card name 6", false],
["card name 5", true],
["card name 5", false]
]
我用过:
preg_match_all('/"card":"(.*?)"/m', $content, $matches);
它获取卡片的值,但不获取其他信息。最好的方法是什么?我知道它将使用某些版本的[隐藏|禁用]。如果有影响的话,“card”将始终是这些块中的第一个值。
使用正则表达式匹配注释块,并从其中获取 JSON。然后你可以使用
json_decode()
来解析它。
preg_match_all('#<!-- wp:genesis-custom-blocks/blockname\d* (.*?) /-->#s', $content, $matches);
$results = array_map(fn ($json) => json_decode($json, true), $matches[1]);
var_dump($results);
输出:
array(7) {
[0]=>
array(4) {
["card"]=>
string(11) "card name 1"
["boxes"]=>
string(14) "multiple boxes"
["selected"]=>
bool(false)
["hide"]=>
bool(true)
}
[1]=>
array(4) {
["card"]=>
string(11) "card name 2"
["boxes"]=>
string(14) "multiple boxes"
["selected"]=>
bool(false)
["hide"]=>
bool(true)
}
[2]=>
array(4) {
["card"]=>
string(11) "card name 4"
["boxes"]=>
string(14) "multiple boxes"
["selected"]=>
bool(false)
["hide"]=>
bool(true)
}
[3]=>
array(1) {
["selected"]=>
bool(false)
}
[4]=>
array(2) {
["card"]=>
string(11) "card name 6"
["selected"]=>
bool(false)
}
[5]=>
array(4) {
["card"]=>
string(11) "card name 5"
["boxes"]=>
string(14) "multiple boxes"
["selected"]=>
bool(false)
["disabled"]=>
bool(true)
}
[6]=>
array(3) {
["card"]=>
string(11) "card name 5"
["boxes"]=>
string(14) "multiple boxes"
["selected"]=>
bool(false)
}
}