【发布时间】:2014-04-15 07:10:12
【问题描述】:
我想导出一些在我的文本中没有意义的单个标签(从 MS Word 中导出),例如:
<b stuff /> and <i stuff />.
我尝试了以下正则表达式:
/<b(.*?)\/>/i
但是当我有类似的东西时它不起作用:
<i>My text</i> some other text<i class="stuff" /> my final text.
它不是只获取单个标签,而是获取所有内容。请问我该如何解决这个问题?最终结果必须是:
<i>My text</i> some other text my final text.
更新: aelor 的答案是最接近我需要的答案。最后,我混合了 aelor 和 Mikhail 的答案来得到这个:
/(\s?)<[ib][^>]+\/>(\s?)/
谢谢!
【问题讨论】:
-
/<(b|i) (.*?)\/>/i匹配b和i。我会在后面添加一个空格以防止删除其他标签。 -
.*?是惰性的,会尽可能少地匹配。它也是“将任何字符从零匹配到无穷大”,因此您的正则表达式匹配也包括第一个标签。.+?是懒惰的“1 到无穷大”搜索。[^>]+的意思是“任何不是>匹配 1 到无穷次的字符”更有用且性能更好。
标签: php html regex tags preg-replace