2013-06-18 53 views
-1

我想趕上正則表達式,我做了一個如下;正則表達式不工作,因爲它應該

^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ ,\d]{1};(\d){8};(\d){1};(\d){1}; $ 

並且樣本是;

ä;1234;00126434;K;11821111;00000000;SOME TEXT ; 0;00000000;0;0; 

至於我讀過

是所有的字符,\ d是數字,{n}和變化表示n時間和取決於變化,更多的重複。

可能是什麼問題?

+6

問題在哪裏? –

+1

您可能會發現http://www.debuggex.com/有用。 – Josay

+0

哇,debuggex是天上的 – mechanicum

回答

3

數建議/意見:

  • 你可以刪除所有{1} s,他們什麼都不做。
  • [A,K]表示「A,,K」。如果您想匹配AK之間的任何字母,請使用[A-K]
  • 您應該將捕獲組置於重複周圍:(\d{7,8})捕獲7-8位數字; (\d){7,8}只會捕獲最後一位數字。
  • [ ,\d]{1}在您的正則表達式上失敗,因爲在字符串中的該點有兩個字符(空格和0)。
  • 您可能需要刪除最後的$之前的空格,除非最後一個分號後的字符串中實際上有空格。

這裏的一個相匹配的版本(並捕獲在單獨的組中的每個元件):

^(.);(\d{4});(\d{8});([A-K]);(\d{7,8});(\d{8});([A-Z ]+);([ ,\d]+);(\d{8});(\d);(\d); *$ 

看到它in action on regex101.com

+1

+1 - 迄今唯一有效答案! –

1

試試這個:

^(.){1};(\d){4};(\d){8};[A-K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ \d]{2};(\d){8};(\d){1};(\d){1};$ 

這裏是什麼在你的正則表達式是發生 ^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ ,\d]{1};(\d){8};(\d){1};(\d){1}; $

  • $在年底前有額外的空間。
  • 若要指定範圍使用-而不是逗號,則範圍應爲[A-K]
  • [ ,\d]範圍內您已將其限制爲1個字符{1}它應該是{2}一個用於 空間和1位數字。

附加:你並不需要指定{1}因爲默認情況下將匹配一個前令牌

+0

你錯過了開始的'ä'字符:這裏是編輯http://www.rubular.com/r/NLtYbNlnjT –

0

如果你不工作,你可以試試這個:

^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};(\d){1};(\d){8};(\d){1};(\d){1};$ 
+0

nope,測試它,例如@ www.rubular.com –

+0

它匹配www.rubular.com和http:///www.debuggex.com/ ...也許你在...之後粘貼一個空格字符 –

+1

看看捕獲組http://www.rubular.com/r/Pa4BgYKtPi要麼刪除它們,要展開它們以便捕獲它們有效 –

2

請,不要濫用正則表達式的一切。

您的格式爲CSV格式,只需分割爲;並驗證各個部分是否正確。這是完全有效的,通常具有相似的效率,並且更易於調試。

使用正則表達式,確保您正確地逃脫(即雙逃逸!)。在大多數編程語言中,\是字符串中的保留字符,您將需要使用\\以獲得所需的效果。

+0

感謝您的信息。 – mechanicum

相關問題