我要做的任务很奇怪。
我需要使用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 category”。
当我尝试在开始标签和结束标签之间抓取文本时-工作正常,并且正在使用此功能:
preg_match_all('#<strong>(.*?)</strong>#',$string,$matches);
我尝试了多种组合以在结束标记和开始标记之间获取文本。他们都没有解决。我已经结束使用这样的功能了:
preg_match_all('#<\/strong>(.*?)<strong>#',$content,$matches_all);
没有结果。
奇怪的是,在在线正则表达式测试器上,具有上述功能且具有上述功能的功能有时会起作用。
我的图案不好吗?我是否缺少一些标志?您知道以这种方式获取文字的最佳方法是什么吗?不幸的是,我与Regex方法有关,在我的情况下,不允许使用XMLDomParser之类的解决方案。
非常感谢您的帮助。
答案 0 :(得分:0)
答案 1 :(得分:0)
看起来像您的php安装/配置有问题。
您的代码不变。
$content = '<h2>Title of post</h2> 1 category <strong>task 1</strong> 1 category <strong>task 2</strong> 1 category <strong>task 3</strong> ';
preg_match_all('#<\/h2>(.*?)<strong>#',$content,$matches);
print_r($matches);
输出:
Array
(
[0] => Array
(
[0] => </h2> 1 category <strong>
)
[1] => Array
(
[0] => 1 category
)
)
实时demo
注意:由于您的模式只有一个匹配项(在</h2>
<strong>
之间),您可以像$maches[1][0]
一样访问或使用preg_match
答案 2 :(得分:0)
如果您希望在结束标记和开始标记之间所有一段文本,则可以使用此代码。请注意,我更改了您的文本,以使每组关闭/打开标签之间的文本都不同,从而很明显匹配是在查找每个值。
$str = '<h2>Title of post</h2> 1 category <strong>task 1</strong> 2 category <strong>task 2</strong> 3 category <strong>task 3</strong> ';
preg_match_all('#(?:</[^>]+>)(.*?)<#', $str, $matches);
print_r($matches[1]);
输出:
Array
(
[0] => 1 category
[1] => 2 category
[2] => 3 category
)