2012-10-31 26 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

相关问题