2011-07-11 63 views
1

嗨,我有這樣的preg_match_all模式使用

1443 F 001.tif 
1731 001.tif 
1731 A 001.tif 
1731 E 001.tif 
1731 I 001.tif 
ARELLANO GALVEZ 001.tif 
AVILA 001.tif 
berra morales jose 001.tif 
berra morales jose 002.tif 
CASTRO 001.tif 

我想趕上這就是以數字開頭的文件,接下來有一個字母和另一個字符結尾的文件清單,後來我想這在比賽中數組。

例如「1443 F 001.tif」必須匹配。

,我要像

$encontrados[0] = 1443 
$encontrados[1] = F 
$encontrados[2] = 001.tiff 

$pattern = '/^[\d]+[\w]?+(*)?/'; 
$var = preg_match_all($pattern, $documento, $encontrados); 

的比賽,但我的正則表達式不起作用,任何線索?

回答

1

嘗試爲你的任務模式

'/^(\d+)\s*([a-zA-Z])\s*(.*)/' 

\d將匹配你的電話號碼(無需方括號在這裏),[a-zA-Z]一個字母(你可以把它可選寫[a-zA-Z]?)和.*其他部分相匹配。請注意,\s*可以吃中間的任何空格。

+0

哇,現在我有更好的關於正則表達式工作的知識:D,這個工作真的很好 – OsDev

+0

這真的不符合規範。你的正則表達式可以匹配諸如'0103'或'2_'的東西。 –

+0

@Jason我讀了這封信是可選的問題(正如我在答案中明確寫的)。你說得對,如果這封信是強制性的,那麼'?'必須被刪除。 – Howard

2

你的正則表達式格式不正確。

嘗試:

$pattern = '/^[\d]+ [a-zA-Z] .+$/'; 

注:該模式匹配的字符串起始數字,空格,後跟一個字母(大寫或小寫),空格,和與結尾的任何其它字符。

+0

嘿:D感謝您的快速回答,但我有一個問題,即正則表達式只會使一個匹配成爲一個完整的字符串,並且不會與第一個數字和Letter之間有空格的字符串一起工作。 – OsDev

+0

你沒有提到空間。查看更新。 –

+0

感謝:D爲你的幫助,這是非常有幫助的 – OsDev