【问题标题】:I need a php regular expression that replaces one tag with another我需要一个用另一个标签替换一个标签的 php 正则表达式
【发布时间】:2015-06-30 02:48:01
【问题描述】:

这是我需要做的:

我需要匹配以下标签:

<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>

我需要将 span 替换为符合 html3 的标记,但将文本保留在两者之间。替换后的最终标签应该是这样的:

<u>text sample</u>

我只是不擅长正则表达式,似乎无法找到答案。

提前谢谢你。

【问题讨论】:

标签: php html regex html-manipulation


【解决方案1】:

正则表达式不是为标签操作而设计的。

如果你有任何形式的嵌套,它会变得一团糟。

但是,鉴于提供的非常简单的示例,您也许可以这样做:

$MyString = preg_replace
    ( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/'
    , '<u>$1</u>'
    , $MyString
    );


但这在很多方面都存在缺陷,您最好使用专为处理标签而设计的工具。

看看DOMDocument->loadHTML()related functions

【讨论】:

    【解决方案2】:

    不要使用正则表达式来解析 HTML

    do not use regular expressions to parse HTML

    不要使用正则表达式解析 HTML

    do not use regular expressions to parse HTML

    do not use regular expressions to parse HTML

    do not use regular expressions to parse HTML

    您需要更多说明吗?

    使用 DomDocument::LoadFromHTML ;)

    【讨论】:

    • mikeseth.com 链接不再有效。
    【解决方案3】:

    你需要这样几行:

    preg_replace('|<SPAN style="TEXT-DECORATION: underline">(.+?)</SPAN>|', '<u>$1</u>', $text);
    preg_replace('|<SPAN style="FONT-WEIGHT: bold">(.+?)</SPAN>|', '<b>$1</b>', $text);
    preg_replace('|<SPAN style="FONT-STYLE: italic">(.+?)</SPAN>|', '<i>$1</i>', $text);
    

    等等。尽管如果标签有可能不会完全匹配那些正则表达式(通常是这种情况,除了非常简单的机器生成的 HTML),使用正则表达式执行此操作会变得异常复杂,并且你最好使用某种解析器。

    【讨论】:

      【解决方案4】:

      对于您给出的基本示例。

      <?php 
      $string = '<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>';
      $pattern = '/<SPAN style=\"TEXT-DECORATION: underline\">(.+?)<\/SPAN>/';
      $replacement = '<u>$1</u>'
      echo preg_replace($pattern,$replacement,$string);
      ?>
      

      会成功的。 模式正则表达式非常简单 - 这正是您正在寻找的内容(带有引号和“/”转义),带有 (.+?) 表示包含所有可能的字符,直到 SPAN 标记结束。这假设您的代码格式一致,您可以在 $pattern 的末尾附加一个 'i' 以使其不区分大小写。

      请注意,这并不是真正正确的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 2021-12-14
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多