将正则表达式形成为Java字符串

时间:2012-10-31 12:28:53

标签: java regex string

我有一个字符串,其中只有数字和无,一个或多个百分比是允许的

所以我的正则表达式是:[\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,{{1} },%5a1
  • 好: 12345671234567823%1%53%53

1 个答案:

答案 0 :(得分:4)

  

我有一个字符串,其中只有数字和无,一个或多个百分比是允许的,所以我的正则表达式是:[\d+%]

实际上,匹配一个字符,可能是一个数字,+%

要匹配您在文字中描述的内容,您需要这样的内容:

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

匹配包含至少一个数字和可选百分号的字符串。请注意,%字符不是元字符,因此不需要在正则表达式中进行转义。它将匹配以下所有内容:

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

等等,但不只是%或包含除数字或%字符以外的字符的任何字符串。


  

是否有任何好的在线工具可以转义java的长正则表达式?

我不知道一个。但逃避并不是你的正则表达不起作用的原因。


  

一个更高级的问题:只有在字符串中至少有一位数字时才允许%,不应该只允许%!

我认为上面的正则表达式就是这样。而对于记录,这就是Java String文字的样子:

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

除非您在正则表达式中包含TAB,NL,CR等字符,否则只需将每个\替换为\\即可。