【问题标题】:preg_replace or str_replacepreg_replace 或 str_replace
【发布时间】:2009-12-29 15:33:31
【问题描述】:

我有一些文字,如下所示:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

我想要的是保留 Unknown Text,但去掉 (SOME KNOWN TEXT)(SOME OTHER KNOWN TEXT).

我认为 preg_replace 会给我我想要的,但我需要正则表达式来替换它:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

有了这个..

Unknown Text

我看到 preg_replace 有 3 个参数,regex替换文本主题

有没有办法将未知文本的值传递给替换文本参数,或者,有一种方法可以将左右部分 (SOME KNOWN TEXT)(SOME OTHER知道文本) 而不删除未知文本?或者,是否有 str_replace() 解决方案?

谢谢

---更新---

(SOME OTHER KNOWN TEXT) 片段可能存在于文本的其他位置,但我不希望它被删除,除非它遵循 (SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT) 的模式。我认为最初的 str_replace 建议不会因此而起作用。

【问题讨论】:

    标签: php preg-replace str-replace


    【解决方案1】:

    条件是什么?如果你有:

    (其他一些已知文本)未知文本(一些已知文本)

    (即如果括号文本被交换),您还想删除它吗?已知文本必须始终位于行首还是行尾?如果其中任何一个的答案都是肯定的,那么您最好使用正则表达式。像这样的:

    $new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);
    

    反斜杠 (\) 用于转义 () 字符,它们在正则表达式中具有特殊含义。我假设您想要更改内容 - 您可以在此时删除它们。

    在这个正则表达式中,. 是一个特殊的运算符,意思是“任何字符”。它将匹配任何字符。 + 表示“一个或多个”,并且是前一个运算符的修饰符 - 一起,这些可以解释为匹配“一个或多个任何字符”。 () 字符用于捕获subpattern 中的文本部分。通过将.+ 包含在括号中,我们捕获了它以用于替换。由() 包围的第一部分被正则表达式引擎标记为$1。如果我们有更多,它们将被标记为$2$3,等等。

    如果这些都不适用,您可以使用其他答案中提到的str_replace 函数。

    【讨论】:

    • 有效!你能解释一下我想要保留的物品是如何填充 $1 的吗?
    • 它可以工作,但性能较低,所以如果两个不需要的项目在字符串中的其他位置,请确保您想要结果。
    • @OneNerd:我已将信息添加到答案中,以及有关.+ 运算符的更多信息的链接。
    【解决方案2】:

    您可以简单地为 str_replace 提供您要删除的字符串数组:

    $destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);
    

    如果您不需要任何巧妙的模式匹配,这将是比正则表达式更快的解决方案。

    【讨论】:

      【解决方案3】:

      如果真的知道这两个文本,你可以这样做:

      $result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');
      

      这比正则表达式的性能更好。第一个参数是要替换的键集,第二个参数是替换它的内容,第三个是主题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        相关资源
        最近更新 更多