2011-06-14 50 views
1

在RegEx中搜索單個字符很容易。整體匹配

EXP:至少一個數字:

\d 

,所以我需要在文本匹配至少2位

.*\d{2}.* or .*\d\d.* #### "d2dr5" -> not match... d22r or d00r match.. 

不會起作用,因爲正則表達式引擎查找這些數字作爲連續如何我可以搜索整體嗎?例如

我想在文本中匹配至少3位數字和2個大寫字詞。文本長度可以是最大12.我該怎麼做?如果你能舉一個例子說明這樣的話,我可以有一個點重新搜索

例如匹配:

a9r2lDpDf2 - 匹配。至少3位數字2大寫字母,總共不超過12個字符。

+0

請舉些例子來說明的規則。以下是否匹配。 A5T6at,AA666,AA6666,6AAAAA6AA6,$$ && EEE %% 55 – amal 2011-06-14 09:23:41

+0

你想檢查密碼的強度嗎? (有助於回答問題,如果我們知道*爲什麼*您有問題。) – Richard 2011-06-14 09:24:28

+0

@amal您的第一個不匹配,因爲至少需要3位數字。所有其他人匹配。 @Richard這些組合經常用來檢測密碼強度,但在這裏我想了解如何進行整體匹配。 – 2011-06-14 09:28:35

回答

0

如果你想確保有隻有三個字符串中的數字,你可以試試這個(如果需要的話,添加起始和結束字符串):

[^\d]*\d[^\d]*\d[^\d]*\d[^\d]* 

[^\d]* - 除了數字什麼。

同樣的模式,可以用來檢查大寫字母:

[^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]* 

正則表達式是不檢查長度的最佳工具。您使用的語言有類似length(str)str.lengthstr.length()等。

它可以使用lookahead功能完成。這是正則表達式的外觀在Perl(和它做什麼你問):

/^(?=.*\d.*\d.*\d)(?=.*[A-Z].*[A-Z]).{12}$/ 

(?=.*\d.*\d.*\d) - 「展望」,看是否有3位

(?=.*[A-Z].*[A-Z]) - 「展望」,看看是否有是2個大寫字母

.{12} - 長度必須精確爲12個字符。任何人物12次。

+0

我想匹配文本中的至少3位數字和2個大寫字詞。並且文本長度可以是最大的。 12 – 2011-06-14 09:21:38

+0

你好,我認爲你不明白我的問題。我想將這些要求合併到一個RegEx中。 – 2011-06-14 09:30:26

+0

順序使用這兩個更容易。爲什麼你只能使用一個正則表達式? – Thresh 2011-06-14 09:33:55

0

我不認爲正則表達式是這裏的最佳解決方案,但是對於學術興趣

(?=(.*[0-9]){3})(?=(.*[A-Z]){2}).{5,12} 
+0

阿瑪爾,非常感謝。你能解釋一下你的模式嗎? – 2011-06-14 10:15:46

+0

(?=)是一個零寬度的向前看表達式。這意味着它將向前看到指定模式的字符串,如果它不在那裏,那麼將不會有匹配。因此,正則表達式讀取的是任何出現5-12次的字符,並且該字符串必須在任何位置包含2個大寫字符(?=)和任意位置的3位數(?=)。 – amal 2011-06-14 10:35:17