2010-02-17 119 views
0

我在創建將修復有效字符串的正則表達式時遇到問題。以逗號分隔的字母數字字符串的正則表達式

的字符串將是以下格式: 任何字母數字字符3〜5倍, 後跟一個逗號如果有 其他字符串的其端部

實施例的字符串後更多的字符是: A401,CR56,4U9Y,MO16,ECZGB,A7DC,9LN5,D52PU,UT95,YBPB0,2JWA,AAMW,KVG,6V8W,FWE

TRIR,J107,Q9X,FMFZ,VDAS,557,X7A,DRPB,S97O ,8U62B,IN3I,H8MC,WS4C,U04KQ,X05O。

我已經嘗試了幾種不同的表達式,但是如果我有一個無效的條目似乎沒有匹配。我知道我可以爆炸字符串,然後遍歷數組,但是試圖在一個表達式中這樣做,因爲它看起來很容易,但不能完全弄明白。

〔實施例模式:他們

echo preg_match("/^([A-Z0-9]{3,5})[,|$]{1,}/",$str); 
echo preg_match("/((?<=[^|,])([A-Z0-9]{3,5}){1}(?=[,|$])){1,}/",$str); 

和各種變化,但我不能完全找回贏球模式,所有的幫助表示讚賞。

乾杯, 精神科

+2

「有些人,當遇到一個問題,認爲: 「我知道,我會用正則表達式。」現在他們有兩個問題。「 – 2010-02-17 15:20:34

+4

「有些人在面對正則表達式時會想:」我知道,我會用我記得的引人入勝的引語「,現在他們沒有在討論中加入任何內容。」 ' - Tomalak' – 2010-02-17 15:22:06

+0

很多人都熱切地等待一個正則表達式問題被問到,當一個問題最終被問到時,在40秒的範圍內有4-5個答案:) – Amarghosh 2010-02-17 15:26:11

回答

2
/^[A-Z0-9]{3,5}(?:,[A-Z0-9]{3,5})*$/ 
+0

雖然有點不必要的冗餘。 – brianary 2010-02-17 22:44:34

2
/^([a-z0-9]{3,5},)*[a-z0-9]{3,5}$/ 
+0

有趣的是,頭腦的工作方式是不同的:我和KennyTM一樣,但是你選擇把單個[[a-z0-9] {3,5}'放在右邊(當然,這很好)。 +1給你們兩個。 – 2010-02-17 15:25:23

-1

嘗試:

echo preg_match("/^([A-Z0-9]{3,5}(?:,|$))+/",$str); 
+0

'[,| $]'匹配逗號,豎條或美元符號。編組仍然是'(?:...)',除非你在Perl 6中工作。 – kennytm 2010-02-17 15:27:05

+0

否,'[,| $]'匹配',','|'或'$'。它不匹配逗號或字符串的結尾。 – 2010-02-17 15:27:41

+0

錯過了,我只是修復了不正確的嵌套paren。甚至沒有注意到錯誤的括號。固定。 – brianary 2010-02-17 22:43:51

0

這個工作對我來說:

(\w{3,5})[,.]? 
+0

這匹配'___。'。「 – kennytm 2010-02-17 15:27:48

+0

」字符串的格式爲:任何字母數字字符3到5次,如果在字符串結束後有其他字符,則後跟逗號。 因此不會有___。 沒有理由過度使用它。 – PeterM 2010-02-17 15:33:07

相關問題