Php preg_replace json字符串匹配相同的字符开头/结尾
好的,我有一个JSON字符串,它可以包含1个或多个元素,下面我举了一个sting的例子,但这只是一个例子,真正的字符串要复杂得多。这一个亮点就是我的问题所在Php preg_replace json字符串匹配相同的字符开头/结尾,php,regex,preg-replace,Php,Regex,Preg Replace,好的,我有一个JSON字符串,它可以包含1个或多个元素,下面我举了一个sting的例子,但这只是一个例子,真正的字符串要复杂得多。这一个亮点就是我的问题所在 {"elements":[{"id":2,"string":"something","string2":"","string3":"no html here","integer":2,"array":{"options":[{"id":1,"value":"data"},{"id":2,"value":"more data"}]},"st
{"elements":[{"id":2,"string":"something","string2":"","string3":"no html here","integer":2,"array":{"options":[{"id":1,"value":"data"},{"id":2,"value":"more data"}]},"string4":"text with <a href=\"http:\/\/www.example.com\">html<\/a>","string5":"naughty <a href=\"http:\/\/www.example.com\">link<\/a>"},{"id":2,"string":"something","string2":"","string3":"no html here","integer":2,"array":{"options":[{"id":1,"value":"data"},{"id":2,"value":"more data"}]},"string4":"text with <a href=\"http:\/\/www.example.com\">html<\/a>","string5":"naughty <a href=\"http:\/\/www.example.com\">link<\/a>"}]}
我有两个问题:-
我们的想法是,这比将JSON字符串转换为对象,然后遍历数百个元素的数组来删除HTML要快得多。如果这更快的话,我就这么做,这会简单得多。不要直接处理JSON,使用 然后使用清理HTML,这在清理HTML代码方面做得很好
然后使用再次将数据编码为json。不要直接处理json,请使用进行解码 然后使用清理HTML,这在清理HTML代码方面做得很好 然后使用.Description再次将数据编码为json 表达式有几个问题,例如使用
*?
将继续捕获所有字符,直到匹配下一个所需字符。我将其替换为将匹配所有非引号的[^”]*?
,这将强制捕获停止使用引号组之外的字符
我还为openquotes([“])
创建了一个捕获组,尽管这可能有点过分,它允许您只向character类添加一个引号。然后,我稍后再参考这个捕获的组,以确保正确的对应结束报价也匹配。这样,如果输入字符串中不需要打开引号,则只需插入问号([“])?
,即可自动找到与打开引号匹配的关闭引号
我还将[{,]
移动到捕获组之外
这是我的正则表达式的清理版本
PHP代码示例:
说明
您的表达式存在一些问题,例如使用*?
将继续捕获所有字符,直到匹配下一个所需字符。我将其替换为将匹配所有非引号的[^”]*?
,这将强制捕获停止使用引号组之外的字符
我还为openquotes([“])创建了一个捕获组
尽管这可能有点过分,但它允许您只向字符类添加一个引号。然后我稍后再引用此捕获的组,以确保匹配正确的对应结束引号。这样,如果输入字符串中不需要打开引号,则您可以简单地插入问号([“])?
并且将自动找到与开放报价匹配的结束报价
我还将[{,]
移动到捕获组之外
这是我的正则表达式的清理版本
PHP代码示例:
只是一个问题:你听说过吗?只是一个问题:你听说过吗?
([{,]"(?!(elements|string3|string4)":)(.*?)":)(?!,")"(.*?)",
<?php
$sourcestring="your source string";
preg_match_all('/[{,]((")(?!(elements|string3|string4)\2:)([^"]*?)\2:)(")([^"]*?)\5(?=,)/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
$matches Array:
(
[0] => Array
(
[0] => ,"string0":"something0"
[1] => ,"string1":""
[2] => ,"string":"something"
[3] => ,"string5":""
)
[1] => Array
(
[0] => "string0":
[1] => "string1":
[2] => "string":
[3] => "string5":
)
[2] => Array
(
[0] => "
[1] => "
[2] => "
[3] => "
)
[3] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[4] => Array
(
[0] => string0
[1] => string1
[2] => string
[3] => string5
)
[5] => Array
(
[0] => "
[1] => "
[2] => "
[3] => "
)
[6] => Array
(
[0] => something0
[1] =>
[2] => something
[3] =>
)
)