我需要一个正则表达式,匹配任何东西,但模式\ d + - \ d +正则表达式匹配任何东西,但一个特定的模式
的被忽略的模式与一个或多个数字后跟一个连字符,然后一个号接着是带有一个或多个数字的另一个号码。
例如:
测试123测试123-123测试
只有 “123-123” 不应该匹配
谁能帮助我实现这一目标?
我需要一个正则表达式,匹配任何东西,但模式\ d + - \ d +正则表达式匹配任何东西,但一个特定的模式
的被忽略的模式与一个或多个数字后跟一个连字符,然后一个号接着是带有一个或多个数字的另一个号码。
例如:
测试123测试123-123测试
只有 “123-123” 不应该匹配
谁能帮助我实现这一目标?
您没有指定是否需要匹配单个字符串(Pattern#matches(String, CharSequence)
或String#matches(String)
)的表达式,或者是否希望在一个字符串中找到多个匹配项(Matcher#find()
)。
下面的分支,如果input
是测试或,但如果它是123-123一个字符串:
if (input.matches("(?s)(?!\\d+-\\d+).*")) {
// ...
}
虽然,如果你的代码使实际拨打matches
,你不妨写:
if (!input.matches("\\d+-\\d+")) {
// ...
}
如果要在一个字符串中查找多个匹配项,很大程度上取决于您想如何进行标记化。下面是列出了形式\d+-\d+
的不由空格隔开的序列示例的代码:
Pattern pattern = Pattern.compile("(?<=^|\\s)(?!\\d+-\\d+)\\S+(?=$|\\s)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
对于“测试123测试123-123测试”的输入时,输出将是:
Test
123
Test
Test
如果要以不同方式标记化,则必须调整边界匹配。 Java的正则表达式有一个字边界匹配器(\b
),但123-123不会被视为一个单词,因为它包含一个连字符,它不是一个正则表达式字符。
我需要在字符串中找到这个模式。所以你的答案的第二部分解决了我的问题。非常感谢你! – chribrue
您可以使用'\\ d +(?! - \\ d +)' –
您是否希望用户限制 - 键入? –
's.split(“\\ d + - \\ d +”)' –