获取html标记和特定字符之间的文本

时间:2014-04-11 23:32:51

标签: php html regex

在以下字符串中,我需要使用php和regex以及preg_match

仅提取2014-04-19
 ...</abbr></td><td><abbr class="dtend" title="2014-04-19T00:00:00+00:00">19 Apr 2014</abbr></td></tr>...

我使用的preg_match和regex字符串是:

preg_match("/class=\"dtend\" title=\"(.*)\"\>/i", $str,$str2);

我获得的字符串是:

2014-04-19T00:00:00+00:00

&#34; T&#34;数字(时间)显然是随机的。 我不是很有经验,也不是新手,但真的无法解决这个问题。你能提供一些建议/帮助吗?

4 个答案:

答案 0 :(得分:3)

可能会使用lookahead来满足T,有很多方法可以做到:

$pattern = '/class="dtend" title="\K[^"]+(?=T)/i';
  • \K会重置比赛的开头,然后会在$out[0]
  • 使用[^"]+作为匹配的字符(+一个或多个字符,不是"

Test on regex101.com

有关更多正则表达式信息,请参阅FAQ

答案 1 :(得分:0)

你的正则表达式是不完整的。将其更改为:

"/class=\"dtend\" title=\"(.*)T.*\"\>/i"

这样,捕获组仅捕获第一个T

答案 2 :(得分:0)

你可以使用:

preg_match("/class=\"dtend\" title=\"([0-9\\-]+)[^\"]+\"\>/i", $str,$str2);

([0-9\\-]+)将获取任意数字符号或-(注意:由于多次转义,您可能需要在此使用树/四\

[^\"]+ - 跳过所有非"符号

答案 3 :(得分:0)

为什么在已知给定字符串上使用regelar表达式?

你应该做这样的事情 -

$var = '<td>T<abbr class="dtend" title="2014-04-19T00:00:00+00:00">19 Apr 2014</abbr></td></tr>';

$string_to_search = 'class="dtend" title="';

$start = strpos($var, $string_to_search);

$var = substr($var,$start+strlen($string_to_search),10);

由于正则表达式以更简单的方式执行它可能看起来很糟糕但是只要你知道你期望什么就应该总是使用简单的字符串函数而不是正则表达式。