【发布时间】:2018-08-11 11:17:53
【问题描述】:
我有很奇怪的任务要做。
我需要使用 PHP 中的 preg_match() 函数从 html 标签中获取文本。问题是我需要的文本介于关闭和打开 html 标记或带有标记的文本之间。
下面是我的html字符串:
<h2>Title of post</h2> 1 category <strong>task 1</strong> 1 category <strong>task 2</strong> 1 category <strong>task 3</strong>
更具体地说:我需要在</h2> 和<strong> 标记之间使用字符串“1 个类别”。
当我尝试在开始标签和结束标签之间抓取文本时 - 它工作正常,我正在使用这个功能:
preg_match_all('#<strong>(.*?)</strong>#',$string,$matches);
我尝试了许多组合来获取结束标签和开始标签之间的文本。他们都没有成功。我已经结束了使用这样的功能:
preg_match_all('#<\/strong>(.*?)<strong>#',$content,$matches_all);
没有结果。
奇怪的是,在在线正则表达式测试器上,这个具有上述模式的函数有时会起作用。
我有不好的模式吗?我错过了一些标志吗?您知道以这种方式获取文本的最佳方法是什么吗?不幸的是,我必须使用 Regex 方法,在我的情况下不允许使用 XMLDomParser 之类的解决方案。
非常感谢您的帮助。
【问题讨论】:
-
为什么你说它对你不起作用?输入?输出?预期输出?
-
您可以在ideone.com 或类似处准备一些代码
-
您可以通过您的第一个工作正则表达式将字符串拆分为一个数组。结果数组将有
" 1 category "。类似$arr = preg_split("/<(strong|h2)>.*?</(\1)>/", $input); -
@fabtosz 请解释为什么不允许您使用适当的工具来完成此任务。 3v4l.org/5BIG4
标签: php html regex parsing preg-match