Php [.\s]*是否忽略了点?
我试图在一些字符串化的json中匹配一个对象(因为一些不幸的特定于服务器的PHP限制) 我的尝试: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,但这说明了问题所在。请注意,在我
/\{\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”。*?\
以匹配换行符。