2

我有一个字符串,其中只有数字而没有,允许一个或多个百分比

所以我的正则表达式是: ,你可以在这里[\d+%]测试它

对于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的长正则表达式?

一个更高级的问题:
只有在字符串中至少有一个数字时才允许使用 %,而不允许使用 %!并且:没有 a% 的数字只有在位数正好是 8 位时才被允许,而不是更少(意味着:1234567 不好,但 12345678 好)

测试用例:

  • 坏: % , (空字符串), 23b, -1, 7.5, %5a, 1,1234567
  • 好: 12345678 , 23%, 1%53%53, %7
4

1 回答 1

4

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

实际上,它匹配一个可能是数字、a+或 a 的字符%

为了匹配你用文字描述的内容,你需要这样的东西:

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

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

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

依此类推,但不仅仅是%或任何包含数字或字符以外的字符的%字符串。


有没有什么好的在线工具可以转义java的长正则表达式?

我不知道一个。但是转义并不是您的正则表达式不起作用的原因。


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

我认为我上面的正则表达式可以做到这一点。作为记录,这是一个 Java 字符串文字的样子:

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

除非您在正则表达式中有 TAB、NL、CR 等字符,否则只需将每个人替换\\\.

于 2012-10-31T12:34:50.207 回答