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

时间:2015-04-20 15:01:55

标签: java regex

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

例如在rails中将是:

^(25677|25678)

示例输入为256776582036256782405036

4 个答案:

答案 0 :(得分:2)

^(25678|25677)

^2567[78]

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

应该为你做的伎俩...会在

之后找到任何数字,然后是任何数字

答案 1 :(得分:1)

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

^2567[78]

如果需要在字符串中的任何位置匹配数字,请使用\b anchor(如果在Java代码中创建字符串文字,则使用反斜杠加倍)。

\b2567[78]
  

如果在数字的开头有可能+

,那该怎么办?

添加一个可选的+,就像这个[+]?一样,或者像\+?一样(再次,将反斜杠加倍,以包含在字符串文字中)。

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

答案 2 :(得分:0)

尝试类似:

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

正则表达式^2567[78].*$表示:

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

如果您在说25677之后只需要数字,那么正则表达式应为^2567[78]\\d*$,这意味着在开始时匹配的字符串后面跟着0或n个数字。

答案 3 :(得分:0)

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()方法测试整个字符串是否与模式匹配;因此,前导^锚是不必要的,但需要尾随.*

如果您需要考虑可选的潜在客户+(正如您在对其他答案的评论中所述),请在模式的开头(或{{1}之后)添加+?如果使用的话)。