2011-11-22 32 views
0

我有一個出生年份匹配下面的一段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"信息以挑選出年?

回答

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)與$

0

試試這個:

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

它有時是非常有用開發利用像http://txt2re.com工具的例子正則表達式。它可以給你準確的PHP代碼來用來匹配字符串。

1

試試這個:

所有的
'/BORN ON:\s+\w+, \w+ \d+, (20\d\d)/' 
0

首先,規範所有輸入數據。如果您要解析的字符串是固定寬度或遵循特定的簡單格式,請注意並開發一個更適合輸入數據的正則表達式。如果您需要快速參考,請查看txt2re