我如何改善这个正则表达式?

时间:2011-11-22 06:52:42

标签: php regex

我有以下用于匹配出生年份的PHP代码:

$pattern = "/20\d\d/";

$exp = "BORN ON:        Friday, June 11, 2001 ";

$match = preg_match($pattern,$exp, $matches);

echo $matches[0];

这匹配"2001" ...这就是我想要匹配的 - 出生年份。但这显然是一个解决方案的黑客,如果由于某种原因在$exp之前还有其他年份可能会遇到问题。 如何包含"BORN ON"信息以便选出一年?

4 个答案:

答案 0 :(得分:1)

试试这个:

'/BORN ON:\s+\w+, \w+ \d+, (20\d\d)/'

答案 1 :(得分:1)

还搜索“BORN ON”并使用捕获组。

$pattern = "/BORN ON.*(20\d\d)\s$/";
$exp = "BORN ON:        Friday, June 11, 2001 ";
$match = preg_match($pattern,$exp, $matches);
echo $matches[1];

我将年份放入捕获组中,因为现在它周围有括号,您可以使用$matches[1](而不是0)获得此组。另外,我将年份绑定到字符串的末尾(两者之间可能有空格\s)和$

答案 2 :(得分:0)

试试这个:

$pattern = "BORN ON.*/20\d\d/";

从使用示例http://txt2re.com等工具开发正则表达式有时会很有帮助。它可以为您提供用于匹配字符串的确切PHP代码。

答案 3 :(得分:0)

首先,规范化所有输入数据。如果您正在解析的字符串是固定宽度或遵循特定的简单格式,那么请注意并开发一个更适合输入数据的正则表达式。如果您需要快速参考,请查看txt2re