php regex从字符串中删除" -s

时间:2016-05-16 07:44:06

标签: php regex

我需要删除制作无效json的" -s,如何在php regex中执行此操作?

  

" name":" Steak" au Four" ",

在这种情况下删除" au Four" -s"引号

2 个答案:

答案 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);

Sample demo here