正则表达式匹配除特定模式之外的任何内容
Regex match anything but a specific pattern
我需要一个正则表达式,匹配除模式 \d+-\d+
之外的任何内容
要忽略的模式是一个或多个数字后跟一个连字符,然后是另一个具有一个或多个数字的数字。
例如:
测试123测试 123-123 测试
只有“123-123”不应匹配
谁能帮我实现这个目标?
您没有指定您是否需要一个表达式来匹配单个字符串(Pattern#matches(String, CharSequence)
或 String#matches(String)
),或者您是否想在一个字符串中查找多个匹配项(Matcher#find()
) .
匹配单个字符串
如果 input
是 Test 或 123,则采用以下分支,但如果是 ,则不会123-123:
if (input.matches("(?s)(?!\d+-\d+).*")) {
// ...
}
尽管如此,如果您的代码进行了实际的 matches
调用,您也可以这样写:
if (!input.matches("\d+-\d+")) {
// ...
}
在字符串中查找匹配项
如果您想在一个字符串中找到多个匹配项,很大程度上取决于您要如何标记化。下面的示例代码列出了所有 not 形式 \d+-\d+
:
的以空格分隔的序列
Pattern pattern = Pattern.compile("(?<=^|\s)(?!\d+-\d+)\S+(?=$|\s)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
对于 "Test 123 Test 123-123 Test" 的输入,输出将是:
Test
123
Test
Test
如果你想以不同的方式标记化,你将不得不调整边界匹配。 Java 的正则表达式有一个单词边界匹配器 (\b
),但是 123-123 不会被认为是一个单词,因为它包含一个连字符,这不是正则表达式字符。
我需要一个正则表达式,匹配除模式 \d+-\d+
之外的任何内容要忽略的模式是一个或多个数字后跟一个连字符,然后是另一个具有一个或多个数字的数字。
例如:
测试123测试 123-123 测试
只有“123-123”不应匹配
谁能帮我实现这个目标?
您没有指定您是否需要一个表达式来匹配单个字符串(Pattern#matches(String, CharSequence)
或 String#matches(String)
),或者您是否想在一个字符串中查找多个匹配项(Matcher#find()
) .
匹配单个字符串
如果 input
是 Test 或 123,则采用以下分支,但如果是 ,则不会123-123:
if (input.matches("(?s)(?!\d+-\d+).*")) {
// ...
}
尽管如此,如果您的代码进行了实际的 matches
调用,您也可以这样写:
if (!input.matches("\d+-\d+")) {
// ...
}
在字符串中查找匹配项
如果您想在一个字符串中找到多个匹配项,很大程度上取决于您要如何标记化。下面的示例代码列出了所有 not 形式 \d+-\d+
:
Pattern pattern = Pattern.compile("(?<=^|\s)(?!\d+-\d+)\S+(?=$|\s)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
对于 "Test 123 Test 123-123 Test" 的输入,输出将是:
Test
123
Test
Test
如果你想以不同的方式标记化,你将不得不调整边界匹配。 Java 的正则表达式有一个单词边界匹配器 (\b
),但是 123-123 不会被认为是一个单词,因为它包含一个连字符,这不是正则表达式字符。