正则表达式在双引号内修剪文本

时间:2013-04-08 10:32:11

标签: php regex preg-replace

我想要一个正则表达式,它将删除双引号文本元素开头和结尾的额外空格。目前我没有提出一个有效的方法。

例如。变换

Martin说“oogle booogle”和Martha说“totty wottie”

Martin说“oogle booogle”和Martha说“totty wottie”

谢谢,

标记

4 个答案:

答案 0 :(得分:5)

您应该能够使用/"\s*(.*?)\s*"/这样的简单正则表达式,并替换为"$1"

正则表达式的解释:

  • " - 一个小型"字符
  • \s* - 空格/制表符/换行符重复0次或更多次
  • (.*?) - 一个懒惰的捕获组尽可能少地匹配,直到到达下一部分:
  • \s* - 空格/制表符/换行符重复0次或更多次
  • " - 一个小型"字符

<强>代码

<?php
    $string = 'Martin said " oogle booogle" and Martha said " totty wottie "';
    $string = preg_replace('/"\s*(.*?)\s*"/', '"$1"', $string);
    var_dump($string);
    //string(58) "Martin said "oogle booogle" and Martha said "totty wottie""
?>

Demo

答案 1 :(得分:0)

$string = 'Martin said " oogle booogle" and Martha said " totty wottie "';

$str = preg_replace_callback(
    '/"(.*?)"/',
    function ($matches) {
        return '"' . trim($matches[1]) . '"';
    },
    $string
);

var_dump($str);

答案 2 :(得分:0)

试试这个

$a = 'Martin said " oogle booogle" and Martha said " totty wottie "';
function Replace1($M){
  //print_r($M);
  return "\"".trim($M[1])."\"";
}
$new=preg_replace_callback("#\"[ ]*(.*?)[ ]*\"#","Replace1",' '.$a.' ');
echo($new);

输出

Martin said "oogle booogle" and Martha said "totty wottie"

答案 3 :(得分:0)

虽然Mark Ba​​ker提供的答案可行,但我认为这有点过于复杂。你不需要回调,一个简单的preg_replace会做:

$string = 'Martin said " oogle booogle" and Martha said " totty wottie "';
$str = preg_replace('/"\s*(.*?)\s*"/', '"$1"', $string);