在php中我有下一个文字:
$text='<div id="my_date_div"
year="2010"
month="12"
day="07"
hour="00"
minute="00"
>
<span id="my_span_days">dys</span>
<span id="my_span_hours">hrs</span>
</div>'
我想执行preg_replace()以仅保留上部文本的某些值,例如年(2010)和小时(00)。
我执行/ year = \“/和/ hour = \”/的查找,但我不知道如何删除我不想要的其他文本,因为expresion [。+ \ s +] *不匹配像“或&lt;
这样的字符我拥有的是
$regex = "/[.+\s+]*year=\"(\d+)\"[.+\s+]*hour=\"(\d+)\"[.+\s+]*$/";
$regrep = "$1 $2";
echo preg_replace($regex, $regrep, $text);
任何提示? 感谢
答案 0 :(得分:2)
您可以使用preg_match_all
匹配所需的文本,并将输入字符串替换为匹配的部分:
preg_match_all('/((?:year|hour)\s*=\s*"\d+")/m',$text,$m);
$text = implode("\n",$m[1]);
答案 1 :(得分:1)
。+ \ s + inside []代表自己,它们没有特殊意义。这就是为什么他们不匹配“&lt;。 codaddict的答案也有一个好的属性:源文本中的小时年属性顺序没有意义。