一个正则表达式,用于在中间没有空格时删除引号

时间:2011-06-25 21:02:40

标签: php regex

我希望在这些引号之间没有空格时删除字符串中的引号 这是一个例子:

    “foobar”应该是foobar
    “foo bar”应该是“foo bar”

我正在使用php和preg_replace()

提前致谢。

4 个答案:

答案 0 :(得分:1)

$outputstr = preg_replace('/"(\S+)"/', '$1', $inputstr);

答案 1 :(得分:1)

preg_replace('/"([a-z0-9]+)"/iU','$1',$string);

答案 2 :(得分:1)

发布的所有答案(包括已接受的答案)均未考虑配对,因此"foo bar"baz"spam ham"之类的字符串将被错误处理。你需要实际需要的东西:

$str = ' "foo bar"baz"spam ham" ';
echo preg_replace_callback('~"(.+?)"~', function($m) { 
    return preg_match('~\s~', $m[0]) ? $m[0] : $m[1];
}, $str);

致OP:请不要接受错误的答案。这让googlers感到困惑,并降低了SO作为知识库的价值。

答案 3 :(得分:0)

或使用否定前瞻

PHP> echo preg_replace('/“(?!。?\ s +。?)/','','what”foo bar“”foobar“');

什么“foo bar”foobar

当然需要一些工作,不能使用嵌套引号等。但你明白了。