【问题标题】:How to find and replace string between two tags using regex in PHP?如何在 PHP 中使用正则表达式查找和替换两个标签之间的字符串?
【发布时间】:2017-01-02 01:57:07
【问题描述】:

如果我们有这样的文字:

[SYS 1]从 2 开始的第 1 页:[/SYS]

Lorem Ipsum 只是打印和排版的虚拟文本 行业。 Lorem Ipsum 已成为行业标准...

[SYS 2]第 2 页来自 2:[/SYS]

它不仅经历了五个世纪,而且还跨越了 电子排版,基本保持不变。

我应该如何在 [SYS] 和 [/SYS] 标记之间只保留文本?像这样:

第 1 页,第 2 页:

Lorem Ipsum 只是打印和排版的虚拟文本 行业。 Lorem Ipsum 已成为行业标准...

第 2 页来自 2:

它不仅经历了五个世纪,而且还跨越了 电子排版,基本保持不变。

我认为以下正则表达式会在没有属性的两个标签内找到文本:

/\[SYS\](.+?)\[\/SYS\]/

但是我应该如何用该标签的内部文本(或任何其他字符串)替换整个元素?

【问题讨论】:

  • 你的正则表达式看起来很接近(而且很好),但我会使用这个:/\[SYS \d+\](.*?)\[\/SYS\]/ ... 找到这个,并替换为第一个捕获组。

标签: php regex preg-replace preg-match


【解决方案1】:

使用以下表达式:

\[SYS[^]]*\](.+?)\[/SYS\]

并替换为$1,参见a demo on regex101.com。


在PHP:
$regex = '~\[SYS[^]]*\](.+?)\[/SYS\]~';
$string = preg_replace($regex, '$1', $your_original_string);

在ideone.com上查看完整代码的演示。

【讨论】:

    【解决方案2】:

    你可以这样替换:

    $re = "/\\[\\/?SYS(?:\\s\\d+)?\\]/";
    $str = "[SYS 1]Page 1 from 2:[/SYS]";
    echo preg_replace($re, "", $str)
    

    【讨论】:

    • 它只会删除“[SYS n]”和“[/SYS]”?如果我以后想替换这些标签之间的文本怎么办?
    • @asDca21 然后使用$re = "/\\[SYS \\d+\\](.*?)\\[\\/SYS\\]/";
    • @ThomasAyoub: 你有 far 更多的反斜杠然后这里需要:) 另外,考虑使用另一个分隔符,例如~.
    • @Jan 你会删除哪个反斜杠?
    • 见上面的答案:)
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多