2017-06-03 83 views
0

我需要一个正则表达式,匹配任何东西,但模式\ d + - \ d +正则表达式匹配任何东西,但一个特定的模式

的被忽略的模式与一个或多个数字后跟一个连字符,然后一个号接着是带有一个或多个数字的另一个号码。

例如:

测试123测试123-123测试

只有 “123-123” 不应该匹配

谁能帮助我实现这一目标?

+0

您可以使用'\\ d +(?! - \\ d +)' –

+0

您是否希望用户限制 - 键入? –

+0

's.split(“\\ d + - \\ d +”)' –

回答

1

您没有指定是否需要匹配单个字符串(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不会被视为一个单词,因为它包含一个连字符,它不是一个正则表达式字符。

+0

我需要在字符串中找到这个模式。所以你的答案的第二部分解决了我的问题。非常感谢你! – chribrue

相关问题