如何指定“任何字符”,包括双引号,gt,lt,equal

时间:2010-12-01 12:09:22

标签: php regex

在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);

任何提示? 感谢

2 个答案:

答案 0 :(得分:2)

您可以使用preg_match_all匹配所需的文本,并将输入字符串替换为匹配的部分:

preg_match_all('/((?:year|hour)\s*=\s*"\d+")/m',$text,$m);
$text = implode("\n",$m[1]);

Ideone link

答案 1 :(得分:1)

。+ \ s + inside []代表自己,它们没有特殊意义。这就是为什么他们不匹配“&lt;。 codaddict的答案也有一个好的属性:源文本中的小时年属性顺序没有意义。