2011-05-23 143 views
2

我當談到正則表達式一個完整的福利局,我需要一種方法來匹配以下模式:正則表達式模式匹配

0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25 

解釋:

有6個部分用下劃線分隔。第一部分總是6 [a-zA-Z0-9]個字符。第二和第三部分是MD5散列,因此它們總是每個都是32 [a-zA-Z0-9]個字符。最後3個部分只能是數字。

我使用PHP的preg_match做到這一點。

在此先感謝。

+0

嘗試閱讀此頁:從開始http://www.regular-expressions.info/reference.html完成 – 2011-05-23 07:01:40

回答

4

你可以嘗試:

<?php 
$string = '0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25'; 
if (preg_match('/([a-zA-Z0-9]{6})_([a-fA-F0-9]{32})_([a-fA-F0-9]{32})_([0-9]+)_([0-9]+)_([0-9]+)/',$string,$match)) { 
    print_r($match); 
} 
?> 
+0

工程很好,除非在最後三個部分的數字之間添加字母,否則如果我不將值返回到$ match,它仍然會呈正值。無論是哪種情況,這對我所需要的都是足夠的。謝謝! – 2011-05-23 07:07:28

+0

@Vitality Isikov這很奇怪。我無法解釋它。別客氣! – AndersTornkvist 2011-05-23 07:17:32

1

編輯 - 爲了更完整的你可以這樣做:

if (preg_match('/[a-z0-9]{6}_[a-f0-9]{32}_[a-f0-9]{32}_\d+_\d+_\d+/i', $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 

我也使其更簡潔replased [0-9]與\ d類,改變MD5的匹配剛剛[一-f0-9],並且我還將[a-zA-Z0-9]更改爲[a-z0-9],並將/i包括在內以區分大小寫。

如果你真的想表達也可以被改寫爲:

/[a-z0-9]{6}(?:_[a-f0-9]{32}){2}(?:_\d+){3}/i

3
$string = "0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25"; 
if (preg_match('/^([a-z0-9]{6})_([a-f0-9]{32})_([a-f0-9]{32})_([0-9]+)_([0-9]+)_([0-9]+)$/i', $string, $matches)) 
{ 
    echo "Match!<br />\n"; 
    echo "First: ".$matches[1]."<br />\n"; 
    echo "MD5 hashes: ".$matches[2]. " - ".$matches[3]."<br />\n"; 
    echo "numbers: ".$matches[4]. " - ".$matches[5]. " - ".$matches[6]."<br />\n"; 
} 

筆記:

  • MD5只是[A-f0-9]不[a-z0-9]。
  • 我把/ I爲不區分大小寫匹配,而不是在每 部分指定[A-ZA-Z] 。
+0

當我複製粘貼呢?這並沒有在所有的工作。 – 2011-05-23 07:02:01

+0

我已經編輯了好幾次,如果仍然不工作,由替補\ d [0-9](我現在編輯它) – 2011-05-23 07:03:00

+0

我已經把你正在試圖匹配整個文本模式你說。如果您需要在較大的文本內匹配該模式,請在模式開始時刪除'^',並在結尾處刪除'$'。 – 2011-05-23 07:04:52

8

這是我能做到最短,BAS (有些不完整):

preg_match('/[a-z\d]{6}(?:_[a-f\d]{32}){2}(?:_\d+){3}/i', $string); 

這將完全匹配一個字母或數字的六個實例;後跟一個下劃線和32個十六進制數字,兩次;隨後是下劃線和任意數量的數字,3次。最後的/i將其置於不區分大小寫的模式。

+0

用於記憶嵌套的{} ops和/ i。 – 2011-05-23 07:12:22