我需要删除制作无效json的" -s,如何在php regex中执行此操作?
" name":" Steak" au Four" ",
在这种情况下删除" au Four" -s"引号
答案 0 :(得分:1)
没有使用正则表达式匹配引号进行替换,因为您最终会得到的只是引号本身。
实际上,这并不完全正确,因为您可以将PREG_OFFSET_CAPTURE
作为第四个参数传递给preg_match()
(您可以在documentation中看到),从而将它们与索引一起使用。
但同样,如果超过两个双引号会怎样。在这种情况下,正则表达式会更复杂。然后,您将使用str_split()
将字符串转换为数组,因此您可以按索引取消设置元素。最后通过将元素连接在一起,再次使用join()
或implode()
将数组转换为字符串。
我认为更容易获取整个值,然后用str_replace()
替换引号。在你的情况下,你可以做这样的事情:
$jsonLine = "\"name\":\"Steak \"au Four\" \"";
$jsonLine = trim($jsonLine);
$pattern = '/^(?P<name>"name"\s*:\s*)(?P<value>".*".*")$/';
if (preg_match($pattern, $jsonLine, $matches) === false) {
exit('Pattern not matched');
}
$name = $matches['name'];
$value = trim(str_replace('"', '', $matches['value']));
$newJsonLine = "$name\"$value\"";
echo $newJsonLine;
您可以看到演示here。
答案 1 :(得分:0)
这是匹配引号中两个引号的php代码:
$re = "/^\"name\": \"[^\"]*?(\")*?[^\"]*?(\")*?[^\"]*?\"$/";
$str = "\"Steak \"au Four\" \"";
preg_match($re, $str, $matches);