带有preg_replace的PHP正则表达式语法

时间:2012-06-04 17:11:32

标签: php regex preg-replace

PHP REGEX是我的一个弱点,但我仍然设法通过在线工具完成一些事情。请考虑以下事项:

通常遵循此模式的主题字符串:1551 UTC 04 June 2012

我想提取“04”并使用以下内容将其分配给$ day变量:

$day = preg_replace("/^([0-9]{4})\s([A-Z]{3})\s([0-9]{2})\s([A-Za-z]{3,})\s([0-9]{4})$/", "$3", $weather['date']);

这适用于以下网站:http://sqa.fyicenter.com/Online_Test_Tools/Test_Regular_Expression_Search_Replace.php

但我不能让它在我的脚本中工作...... $ day将等于整个主题字符串。

2 个答案:

答案 0 :(得分:2)

var_dump()的结果是string(38) "1551 UTC 04 June 2012 "。它有38个字符,而它应该只有21个。所以看起来字符串中有多个空格。

尝试trim()您的输入字符串并将\s替换为\s+以支持多个空格:

$day = preg_replace("/^([0-9]{4})\s+([A-Z]{3})\s+([0-9]{2})\s+([A-Za-z]{3,})\s+([0-9]{4})$/", "$3", trim($weather['date']));

答案 1 :(得分:0)

你说preg_replace,但我想你想使用preg_match()。这是正确的,你不想替换“04”,但你只是想把它变成变量$ day?如果是这样,请使用preg_match()。在你的描述中你说你只想捕获“04”部分,但你的正则表达式有很多捕获组(“()”中的任何东西都是一个捕获组,并将在你给preg_match的数组中返回。)