2012-10-31 89 views
2

我有一個字符串,其中只有數字,沒有一個或多個百分比允許形成一個正則表達式Java字符串

所以我正則表達式是:[\d+%],你可以測試它here

爲java的我要改造它,

public static final String regex = "[\\d+\\%]"; 

,並對其進行測試我使用這個功能

public static final String regex = "[\\d+\\%]"; 

public boolean validate(String myString){ 

    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(myString); 

    if (!matcher.matches()) { 
     return false; 
    }else{ 
     return true; 
    } 
} 

正則表達式是行不通的,另外,如果我使用

public static final String regex = "[\\d+%]"; 

是否有逃避的Java長正則表達式的任何好的在線工具?

更高級的問題:
只有在字符串中至少有一位數字的情況下才允許使用%,只允許使用%!和:沒有%數字如果位數正好是8,而不是更少只允許(指:1234567不好,但12345678是好的)

測試用例:

  • 壞:%(空字符串),23b-17.5%5a11234567
  • 好:1234567823%1%53%53%7
+2

什麼是'['和']'?刪除這些,看看它是否有效。 – rolve

+1

'[\ d%] +'表示:數字或百分號,一次或多次。如果你在方括號中加上+,它會被解釋爲一個文字「+」。 +(方括號外)的含義是:以前的事情,一次或多次。 – ignis

+1

你可以在你的問題中添加一些測試用例嗎? – halex

回答

4

我有一個字符串,其中只有數字,沒有一個或多個百分比是允許的,所以我的正則表達式是:[\d+%]

其實,匹配一個字符,其可能是數字,+%

要匹配你的話已經說明,你需要的是這樣的:

[\d%]*\d[\d%]* 

至少含有一個數字可選百分號的字符串相匹配。請注意,%字符不是元字符,因此不需要在正則表達式中轉義。它會匹配所有的以下內容:

0 
    00 
    %0 
    0%0 
    00% 
    0%0%0 
    0%%0 

等,但不只是%或包含除數字或% characterss其他字符的任意字符串。


是否有逃避的Java長正則表達式的任何好的在線工具?

我不知道一個。但是轉義並不是你的正則表達式不起作用的原因。


更先進的問題:%應該只允許只要有一個位的是字符串,只有一%不應該被允許!

我認爲上面我正則表達式做到這一點。根據記載,這裏是什麼樣子作爲Java String文字:

"[\\d%]*\\d[\\d%]*" 

除非你在正則表達式TAB,NL,CR等字符,這足以只是\\替換每一個人\

+0

斯蒂芬,偉大的工作......我真的必須越來越多地進入正則表達式! – Joerg

+3

@Joerg - 嗯...我對正則表達式的看法是,它們被高估和過度使用。知道如何使用它們是好的,但將它們用作任何解析問題的默認解決方案是不好的,IMO。 –

+0

好吧,我從某人編輯後看到測試用例並不完全是我想要的......我更新了測試用例,所以也許你知道如何解決它? – Joerg

相關問題