【问题标题】:PHP Regex for deleting content inside quotes following by bracketPHP Regex 用于删除引号内的内容,后面跟括号
【发布时间】:2014-03-07 05:41:03
【问题描述】:

我想问一下如何删除引号后跟括号的内容?

例如,我有一个字符串:

$text = '我有一条狗。我的狗很可爱。 “我有一只猫”。我的猫很懒。 “我有一只鸟”(我说)。来我的家! “你确定?”我说 “是的,当然”(2009 年)';

我想要这样的结果:

我有一条狗。我的狗是治愈系。 “我有一只猫”。我的猫很懒。来到 我家! “你确定?”我说。

我已经创建了这个正则表达式:

$return_value = preg_replace('/ "[^"]+"+ \([^\(]+\) /', ' ', $text);

但结果只是在开头的句子中剪切,而不是所有句子。

有人知道解决这个问题吗?

【问题讨论】:

    标签: php regex word


    【解决方案1】:

    有输入:

    我有一条狗。我的狗很可爱。 “我有一只猫”。我的猫很懒。 “我有一只鸟”(我说)。来我的家! “你确定?”我说“是的,当然”(2009 年)。

    并使用:

    / "[^"]+" \([^()]+\)(?:\.(?!\s*$))?/
    

    你得到:

    我有一条狗。我的狗很可爱。 “我有一只猫”。我的猫很懒。来我的家! “你确定?”我说。

    您的正则表达式中的 \) 后面有一个空格,这会阻止匹配。我使用了(?:\.(?!\s*$))?,这意味着只有当它不在字符串末尾时才匹配一个点。

    regex101 demo

    【讨论】:

    • 谢谢您,您的解决方案也有效。但是任何人都可以解释您的方法和 xdazz 方法有什么不同?哪个更好?
    • @CrossVander 不同之处在于 xdazz 还 (1) 匹配字符串开头,(2) 空引号 "",(3) 右引号和第一个括号之间有多个空格,(4 ) 无论如何都会删除最后一个期间。就我而言,我尽可能少地改变了你的正则表达式,同时仍然执行你提到的任务,不做任何假设。 xdazz 有几个假设,这将使它适用于您提到的格式的某些差异(无论是否需要)。
    • 好的。感谢您的解释杰瑞... :)
    【解决方案2】:

    试试:

    echo preg_replace('/"[^"]*"\s*\([^)]*\)\.?/', '', $text);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多