正则表达式检查字符串是否包含'1-n'整数,然后是'0-m'字母

时间:2016-03-30 15:47:39

标签: java regex string

我遇到了一个需要验证字符串的特殊情况。

字符串必须满足某些标准才能进一步移动。这是:

  1. 字符串应以Integer值开头,其长度应为> 1 和< Ñ

  2. 然后是字母,其长度应为0到m(这意味着字母表可能存在或可能不存在)

  3. 如果字符串以Integer开头,

    myString.charAt(0)正在给我。

    如何验证它仅包含< n整数?

    如何通过>验证它? 0和< n整数后跟0到< m字母?

    我可以获得正则表达式来解决它吗?

3 个答案:

答案 0 :(得分:2)

这应该有效

^\d{1,n - 1}[A-Za-z]{0,m - 1}$

如您所愿< n。所以它应该是n-1

DEMO

JAVA中的代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    static boolean isValid(String x, int n, int m)
    {
       String pattern = "^\\d{1," + (n - 1) + "}[A-Za-z]{0," + (m - 1) + "}$";

       Pattern r = Pattern.compile(pattern);

       Matcher t = r.matcher(x);
       return t.find();
  }
public static void main( String args[] ){

  // String to be scanned to find the pattern.
  String line = "123abcdef";
  int n = 4, m = 4;

  if (isValid(line, n, m)) {
        System.out.println("FOUND");
  } else {
        System.out.println("NOT FOUND");
  }

  }
}

n的值应大于或等于2m的值应大于1

<强> IDEONE DEMO

答案 1 :(得分:1)

您可以将其与非常简单的正则表达式匹配:

^(\d+)([A-z]*)$

1位或更多位数,后跟0或更多字母。您可以非常轻松地抓取捕获组,以确切地找出字符串中有多少位数或多少个字母。如果您提前知道mn作为特定数字,那么将它们插入正则表达式中,如下所示:

对于n = 4且m = 3,

^(\d{1,4})([A-z]{0,3})$

这将与0000aaa匹配,但不会与aaa000aaaa匹配。

答案 2 :(得分:0)

到目前为止我们已经看到的解决方案的另一种变体。所有答案都非常好。这也应该与unicode匹配。

<强>模式

\b\p{N}{1,n}\p{L}{0,m}\W

源代码

    public static void matchNumeroAlphaString(){
        int n = 3; 
        int m = 3;
        String text    =
            "John32 54writes about this, 444 and 456Joh writes about that," +
                    " and John writes #about 9EveryThing. ";

       String patternString = "\\b\\p{N}{1," + n + "}\\p{L}{0," + m + "}\\W";


        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);

        while(matcher.find()) {
           System.out.println("Found: " + matcher.group());
        }
    }

<强>输出

发现:444
发现:456Joh