2010-02-09 59 views
2

我希望有一個正則表達式,將匹配:問題的一個正則表達式

A型與ID:

[Image=4b5da003ee133e8368000002] 
[Video=679hfpam9v56dh800khfdd32] 

隨着之間0和n附加選項分離與@

[[email protected]:small] 
[[email protected]:[email protected]:true] 

我到目前爲止:

\[[a-zA-Z]*=[a-zA-Z0-9]*[@[a-zA-Z]*:[a-zA-Z]*]*\] 

...但它不符合所有情況。

+0

這已解決,但它使我遇到了另一個問題,在這裏貼出:http://stackoverflow.com/questions/2230372/getting-some-elements-in-a-string-using-a-regex – marcgg 2010-02-09 15:56:36

回答

5
\[[a-zA-Z]+=[a-zA-Z0-9]{24}(@[a-zA-Z]+:[a-zA-Z]+)*\] 
         ^    ^

您正在用[]包圍該部分,如您所知,這是爲一個類,您只需要一個分組。你還應該確保第一個匹配至少有一個字符,看起來ID塊總是有24個字符,如果是這種情況,用{X}來定義長度爲X的重複。

+0

謝謝,那就是問題 – marcgg 2010-02-09 14:56:49

+0

還有一個問題:如果你這樣做,它不會得到所有的選項,只有最後一個。在例子「 [Image = 4b5da003ee133e8368000002 @ size:small @ media:true]」我只能檢索「@media:true」,當我還需要size:true – marcgg 2010-02-09 15:01:53

+0

這就是尾部*的含義。如果您想將整個部分分組到一個變量中,則需要另一對圓括號,並在打開內部零部件後添加'?:'。這將避免創建反向引用。下一場比賽應該是當前情況下的下一個變量。 – nlucaroni 2010-02-09 15:13:26

3

不應該可以將其他選項分組(而不是括號!)並標記爲可選(而不是*)?你應該使用+而不是*,否則一個空字符串將被匹配。

\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]*:[a-zA-Z]*)*\] 
+0

謝謝你的回答。 nlucaroni速度更快,所以他得到的支票,但這也是正確的 – marcgg 2010-02-09 14:58:28

+0

我會進一步擴大,並使可選字段存在時所需的關鍵和價值,雖然OP沒有解決這個問題。 '[[a-zA-Z] + = [a-zA-Z0-9] +(@ [a-zA-Z] +:[a-zA-Z] +)?\]' – 2010-02-09 14:59:06

+1

?是(@ [a-zA-Z] *:[a-zA-Z] *)的錯誤量詞。有0到n個附加選項。 – Erlock 2010-02-09 15:03:43

2
\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]+:[a-zA-Z]+)*\] 

您需要附上可選的組括號,括號沒有。

+0

就像我對andidog說的那樣,nlucaroni速度更快,所以他得到了支票,但這也是正確的。謝謝:) – marcgg 2010-02-09 14:58:52

0
\[[a-zA-Z]+=[a-zA-Z0-9]+(@[a-zA-Z]+:[a-zA-Z]+)?\] 

我認爲這將是更好一點:)

1
^\[\w+=\w+(@\w+:\w+)*\]$ 

我想這應該可以更具體。

+1

有趣的解決方案,但它也包括下劃線,我不想 – marcgg 2010-02-09 15:04:53