Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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 [.\s]*是否忽略了点?_Php_Regex_Json - Fatal编程技术网

Php [.\s]*是否忽略了点?

Php [.\s]*是否忽略了点?,php,regex,json,Php,Regex,Json,我试图在一些字符串化的json中匹配一个对象(因为一些不幸的特定于服务器的PHP限制) 我的尝试:/\{\s*“first”:“first\u entry\u match”[。\s]*?\}/ 这应该将json中第一个参数为“first”的任何对象与对应的值“first\u entry\u match”匹配。在玩过之后,我发现不起作用了——使用[\s\w:]可以走得很远,但我可能最终要处理一些unicode,只想在看到第一个}之前匹配所有内容 (我使用的是PHP,但这说明了问题所在。请注意,在我

我试图在一些字符串化的json中匹配一个对象(因为一些不幸的特定于服务器的PHP限制)

我的尝试:
/\{\s*“first”:“first\u entry\u match”[。\s]*?\}/

这应该将json中第一个参数为“first”的任何对象与对应的值“first\u entry\u match”匹配。在玩过之后,我发现
不起作用了——使用
[\s\w:]
可以走得很远,但我可能最终要处理一些unicode,只想在看到第一个
}
之前匹配所有内容


(我使用的是PHP,但这说明了问题所在。请注意,在我的例子中,json字符串中有换行符)

要将所有字符匹配到第一个
}
符号,请使用带符号的否定字符类
}
,即
[^}]*

/\{\s*"first":"first_entry_match"[^}]*\}/

要将所有字符匹配到第一个
}
符号,请使用带有符号
}
的否定字符类,即
[^}]*

/\{\s*"first":"first_entry_match"[^}]*\}/

您已将点放在括号中。点表示括号外的每个字符,在括号内,它只代表点字符。

您已经将点放在括号中。点表示括号外的每个字符,内部仅表示点字符。

仅使用以下方法:

/\{\s*"first":"first_entry_match".*?\}/
*?
确保选择中没有
}
。(非贪婪)

只要用这个:

/\{\s*"first":"first_entry_match".*?\}/
*?
确保选择中没有
}
。(非贪婪)


这是用JavaScript解析的吗?如果是这样,您是否知道您可以将一个“reviver”函数传递给
JSON.parse
,从而轻松地首先针对每个
字段?我无法想象您实际上需要在整个JSON结构上使用正则表达式。您真的想直接转到第一个
}
?这对像
{“first”:“first\u entry\u match”,“second”:{“x”:“y”}}
这样的东西不太管用。所有的值都是字符串,所以@TedHopp@cookiemonster我根本不用javascript。只要PHP没有json_decode或json_encode函数如果所有值都是字符串,那么Avinash的答案就是正确的(前提是保证所有字符串都不包含
}
字符)。这是用JavaScript解析的吗?如果是这样的话,您是否知道您可以将“reviver”函数传递给
JSON.parse
,从而轻松地将每个
“first”
字段作为目标?我无法想象您实际上需要在整个JSON结构上使用正则表达式。您真的想直接转到第一个
}
?这对像
{“first”:“first\u entry\u match”,“second”:{“x”:“y”}}
这样的东西不太管用。所有的值都是字符串,所以@TedHopp@cookiemonster我根本不用javascript。只要PHP没有json_decode或json_encode函数如果所有值都是字符串,那么Avinash的答案就是正确的(前提是保证所有字符串都不包含
}
字符)。正如我所说,我在实际的json中有换行符。@lucasem如果您运行PHP,那么这个正则表达式应该更改为
(?s)\{\s*“first”:“first\u entry\u match”。*?\}
以匹配换行符。正如我所说,我的实际JSON中有换行符。@lucasem如果您正在运行php,则此正则表达式应更改为
(?s)\{\s*“first”:“first\u entry\u match”。*?\
以匹配换行符。