我想写一个定期表达对条的所有HTML除链接(《 <a href</a> 标签。它不必是100%安全(我不担心注入攻击或任何东西,因为我析内容,已经批准和发布到一个 SWF 电影).

原始"条标签",定期表达我使用的是 <(.|\n)+?>, 和我试图修改它 <([^a]|\n)+?>, 但这当然会允许任何标签已 一个 在这而不是一个具有它在开始时,一个空间。

不,它应该有真正的问题,但在情况下,任何人在乎知道我写这个 ActionScript3.0 对于一个 快闪 电影。

有帮助吗?

解决方案

<(?!\/?a(?=>|\s.*>))\/?.*?>

试试这个。有类似的东西为p标签。为他们工作所以看不出为什么不。使用负超前检查,它不匹配(作为前缀的一个可选/character)在(使用积极的前瞻)一(可选/prefix)是随后通过一个或一个空间的东西然后>.然后,这匹配起来,直到下一个>符。把这个放在另与

s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;

这应该只留下的开幕和闭幕的一个标签

其他提示

我继续走下去,但没有方法可以推荐我 regexr 太经常。这是梦幻般用于测试这种类型的东西。

在一般存在的问题,这种做法。Regex是最好的'平'的文本相匹配套叠的数据推regex引擎进入的地区为他们不是设计。一般HTML分析需要分析不regex引擎(谷歌之间的差别经常和免费语言如果你想要的全部技术细节)。

这是很容易去掉所有的标签,通过更换/</ 和/>/空串或者他们的实体等同但有选择地过滤HTML使用regex将很容易受到范围广泛的意或恶意的投入破东西。

在这里,你去:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}

怎么样

<[^a](.|\n)+?>

?

strip_tags() 这样做。

在这里,我的包括所有 <a><p><font><b><i><sup> 标签和输出整理好的版本:

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top