有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数字的正则表达式以代码开头

我不是Java开发人员,但我正在与Java系统交互。 请帮我用一个正则表达式来检测所有以25678或25677开头的数字

例如,在rails中:

^(25677|25678)

示例输入是256776582036256782405036


共 (4) 个答案

  1. # 1 楼答案

    在Java中,正则表达式是相同的,假设数字占据了整行。你可以进一步简化为

    ^2567[78]
    

    如果需要匹配字符串中任意位置的数字,请使用\b锚点(如果在Java代码中生成字符串文字,请将反斜杠加倍)

    \b2567[78]
    

    how about if there is a possibility of a + at the beginning of a number

    添加一个可选的+,比如这个[+]?或者这个\+?(同样,在字符串文本中包含两倍的反斜杠)

    请注意,了解正则表达式使用的Java API很重要,因为有些API将要求正则表达式覆盖整个字符串,以便声明它是匹配的

  2. # 2 楼答案

    Java的正则表达式语法非常接近rails,尤其是对于这样简单的东西。诀窍在于使用正确的API调用。如果需要进行多个搜索,则值得一次编译该模式并重用它。类似的东西应该可以使用(混合Java和伪代码):

    Pattern p = Pattern.compile("^2567[78]");
    for each string s:
        if (p.matcher(s).find()) {
            // string starts with 25677 or 25678
        } else {
            // string starts with something else
        }
    }
    

    如果是一次性交易,那么您可以通过更改模式以覆盖整个字符串来简化这一切:

    if (someString.matches("2567[78].*")) {
        // string starts with 25677 or 25678
    }
    

    matches()方法测试整个字符串是否与模式匹配;因此,前面的^锚点是不必要的,但是后面的.*是需要的

    如果你需要解释一个可选的前导+(正如你在对另一个答案的评论中所指出的那样),只需在模式的开头包含+?(或者在使用^之后)

  3. # 3 楼答案

    ^(25678|25677)
    

    或者

    ^2567[78]
    

    如果你这样做^(25678|25677)[0-9]*,它保证其他字符都是数字,而不是其他字符

    应该为你做这件事。。。将查找任意一个数字,然后再查找后面的任何数字

  4. # 4 楼答案

    试试这样:

     String number = ...;
     if (number.matches("^2567[78].*$")) {
        //yes it starts with your number
     }
    

    Regex^2567[78].*$表示:

    数字以2567开头,后跟7或8,然后后跟任意字符

    如果只需要25677后面的数字,那么regex应该是^2567[78]\\d*$,这意味着在开始时匹配字符串后面跟着0或n个数字