这是我需要能够做的事情:
我需要匹配以下标签:
<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>
我需要用符合 html3 的标签替换跨度,但将文本保留在两者之间。替换后的最终标签应如下所示:
<u>text sample</u>
我只是不擅长正则表达式,似乎无法想出答案。
先感谢您。
这是我需要能够做的事情:
我需要匹配以下标签:
<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>
我需要用符合 html3 的标签替换跨度,但将文本保留在两者之间。替换后的最终标签应如下所示:
<u>text sample</u>
我只是不擅长正则表达式,似乎无法想出答案。
先感谢您。
正则表达式不是为标签操作而设计的。
如果你有任何形式的嵌套,它会变得混乱。
但是,鉴于提供的非常简单的示例,您也许可以这样做:
$MyString = preg_replace
( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/'
, '<u>$1</u>'
, $MyString
);
但这在很多方面都存在缺陷,您最好使用专为操作标签而设计的工具。
不要使用正则表达式来解析 HTML
不要使用正则表达式来解析 HTML
您需要更多说明吗?
使用 DomDocument::LoadFromHTML ;)
你需要几行这样的:
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),使用正则表达式执行此操作会变得非常复杂,而且你会更好关闭使用某种解析器。
对于您给出的基本示例。
<?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”以使其不区分大小写。
请注意,这并不是真正的正确方法。