我不是Java开发人员,但我正在与Java系统连接。 请帮我一个正则表达式,它会检测以 25678或25677 开头的所有数字。
例如在rails中将是:
^(25677|25678)
示例输入为256776582036
和256782405036
答案 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}之后)添加+?
如果使用的话)。