2014-04-15 20 views
1

我學習正則表達式,我目前正在研究http://regexone.com/example/0此頁我下面就一切OK,到目前爲止,但我不明白這其中的工作原理請問這個正則表達式的工作

^-?\d+(,\d+)*(\.\d+(e\d+)?)?$ 

它下面的文本匹配:

  • 3.14529
  • -255.34
  • 1.9e10
  • 123,34.00

,並跳過這一:

  • 720p的

溶液解釋它這樣

對於上面的例子,表達「^- ?\ d +(,\ d +)*(。\ d +(e \ d +)?)$' 將匹配一個字符串,帶有可選的負號,一個或多個數字,可選後跟一個逗號和多個數字,後跟 可選小數分量,由一個週期,一個或多個數字組成,另一個可選分量,指數後跟 更多數字。

*是我感到困惑的地方。我是這樣讀的:

^     Start 
-?    Optional Negative 
\d+    One or more digits 
(,\d+)*   Group-comma and one or more digits - the * confuses me here 
(\.\d+(e\d+)?)? Optional group of full stop, one or more digits, another optional group of e and 1 or more digits 

正如我所說的*讓我迷惑。我認爲這與變量內容有關,但我不明白它是如何工作的。

回答

2

*只是一個量詞,表示'匹配0或以上的匹配',在這種情況下爲(,\d+)

在這種情況下,它會匹配這樣的:

,123,123,123,63,345,345,346,3245235,234 (of any length but similar pattern) 

Regular expression visualization

Debuggex Demo

+0

好了,所以這使得它,所以它可以復發,但只有在該節我說的對?它是使它可選(*或更多)的*還是它的一個?那是否有點? –

+0

@PierceMcGeough,是的。 '?'就像'+',但它也允許零匹配。例如'(ab *)'會匹配'abbbb','ab'和'a'。希望有幫助 – sshashank124

+0

是的,當我嘗試自己(在看解決方案之前)我用?但它反過來包括我不想做的0123p –

0

這意味着zeromore次這樣,34組是允許的。

組像,34,666表示爲(,\d+)*

,以便它允許文本122,222,12或323,212,22

相關問題