【发布时间】:2013-11-18 14:55:46
【问题描述】:
我需要从字符串中检索未标记的内容。 这就是输入的样子。
<!--[recognized]-->This is a recognized tag<!--[/recognized]-->
<!--[unrecognized]-->This is an unrecognized tag<!--[/unrecognized]-->
and this is normal text
拥有已识别标签的列表,我需要一些可爱而简单的方法来破坏“已识别”标签 和普通文本,这样我就可以拥有纯粹无法识别的东西。
这就是我现在的做法,但正如您所见,我使用了两个正则表达式。我希望它只是一个。
$recognized_tags = implode( '|', array( 'recognized', 'foo', 'bar' ) );
$pattern = '/<!--\[(?<tag>(' . $recognized_tags . '))\]-->(?<tag_content>.*)<!--\[\/\k<tag>\]-->/s';
$parcial_result = preg_replace( $pattern, '', $text );
preg_match_all( '/<!--\[(?<tag>.+)\]-->(?<tag_content>.*)<!--\[\/\k<tag>\]-->/s', $parcial_result, $matches );
$result = implode( $matches[0] );
那么,你知道我怎么能只使用一个正则表达式来做到这一点吗? 请注意,输入字符串可能会有所不同,并且存在多个标签(已识别或未识别)。
非常感谢!
【问题讨论】:
-
不要尝试为此使用正则表达式。
-
有自闭标签吗?
-
标签可以嵌套吗?
-
我来看看html白名单的东西。是的,有自闭标签( / 的标签)。是的,标签可以嵌套:(
-
自闭标签看起来如何?像这样:
<!--[tag/]-->?