Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Regex:在json中匹配json_Php_Regex_Json - Fatal编程技术网

PHP/Regex:在json中匹配json

PHP/Regex:在json中匹配json,php,regex,json,Php,Regex,Json,只是一个快速的正则表达式问题…希望如此 我有一个字符串,看起来像这样: $string = 'some text [ something {"index":"{"index2":"value2"}"}] [something2 {"here to be":"more specific"}]'; 我希望能够获得以下值: {"index":"{"index2":"value2"}"} 但我所有匹配(或替换)的尝试都让我: {"index":"{"index2":"value2"} pre

只是一个快速的正则表达式问题…希望如此

我有一个字符串,看起来像这样:

$string = 'some text [ something {"index":"{"index2":"value2"}"}]   [something2 {"here  to be":"more specific"}]';
我希望能够获得以下值:

{"index":"{"index2":"value2"}"}
但我所有匹配(或替换)的尝试都让我:

{"index":"{"index2":"value2"}

preg_replace('/\[(.*?)({.*?[^}]})*?\]/is', "", $string);
这里我匹配了整个方括号区域,但希望你能看到我在做什么

否定“不匹配}”似乎没有任何作用。也许我只是需要一个或在那里或什么

好的,如果你有时间回答的话,谢谢你


$string可能包含{}的多个实例,因此贪婪的正则表达式不起作用……据我所知。

你不能让正则表达式计算开始括号和相应的结束括号,你应该使用一个简单的for循环来做这件事,但是,您可以使用贪婪的表达式(如:
({.*})
)获取从第一个开始括号到最后一个结束括号的完整字符串。请注意,简单字符串函数比正则表达式快得多,因此您应该改用它们。

一般来说,正则表达式根本无法匹配包含匹配的开/闭分隔符(大括号或方括号)的内容。如果您的字符串在JSON段周围有一些其他可靠的分隔符,那么这是可能的。伙计,这太糟糕了。我在C#的帖子上看到这样的话。如果是你,你会在每个数组段内分解并匹配吗?或者这根本不是一个好主意?@Senica:为什么不像一个理智的人那样,用JSON解析函数正确解析JSON呢?这就是这些函数存在的目的。这是整个JSON系统的全部目的。也许这会有所帮助-@Senica@Tomalak Geret'kal我完全同意,是什么创建了这个字符串?PHP中有一个处理JSON的功能,为什么你要用preg_替换来重新设计它呢?Pointy应该得到这些要点,因为他首先回答了,但他只是留下了一条评论。谢谢你再次重申。