2012-09-19 88 views
-3

我有一個字符串,我如何使用preg_match從字符串(php)中提取數據?

DXD ROSMITH JOHN 094 5251 907 REQ 008313 M 

我試圖提取的電話號碼,這可能有5-15個數字,用白色空間的未知量。另外我需要最後一封信(性)和名字。

這樣做的確切pattren是什麼?

+0

你有自己試過的東西嗎?除非我們能看到這種數據格式的規範,否則沒有一般的答案。給這個特定的文本樣本提供一個特定的正則表達式很容易,但我猜測文本將會發生變化,所以答案可能適用或不適用於您的實際案例。 – deceze

+0

我已經嘗試了一些自己的東西,但由於即時通訊新的與PHP,我失敗了他們所有。我知道我想要做的事情是可能的。 數據格式非常穩定: [word],whitespace,[word],whitespace,[number],whitespace [name(可能包含少量空格)],空格,[phone-number(可能包含空格)], ,[word],空格,[數字],空格,[char] – Roy

回答

0
$subject = "DXD ROSMITH JOHN 094 5251 907 REQ 008313 M"; 
$pattern = "/[a-z]+\s+[a-z]+\s+\d+\s+[^\d]+\s*(\d+\s*\d+\s*\d+)\s+[a-z\-]+\s+\d+\s+([a-z])/i"; 

preg_match($pattern, $subject, $matches); 

$ matches [1]包含電話號碼,$ matches [2]包含性別。

爲此,我認爲第1,2,4,5和9列只包含字母,並且只包含3,6,7,8,10個數字(性別必須是字母)。

但是,如果你需要有個數字和字母,只需更換[AZ]\ d爲相應列[A-Z0-9]\ S是空白)

+0

這個正則表達式太具體了。 *「可能有5至15位數字,空白數量未知」* ... – deceze

+0

我對其進行了一些修改,因此符合規格。謝謝 – Vlad

+0

thx很多弗拉德,它在99%的情況下工作,排除那些與字符' - '在第9列字,是' - '一個特殊的字? – Roy

0

對於手機你可以試試:

$subject = "DXD ROSMITH JOHN 094 5251 907 REQ 008313 M"; 
preg_match_all("/([0-9]|\s).+{5,15}(\s)/si", $subjectt, $matches); 
相關問題