gpt4 book ai didi

Java\Pattern - 如何编写验证字符串缺失的模式?

转载 作者:行者123 更新时间:2023-12-04 21:27:47 26 4
gpt4 key购买 nike

我尝试从 https://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html .

我有

Pattern PATTERN = Pattern.compile("agg{0}.*");
Matcher m = PATTERN.matcher("agg_0_4_Jul_2010_13_32_53_759_0.csv");

if (m.matches() == true) => true.

我希望它返回 FALSE - 因为它确实在字符串开头包含 agg。简而言之 - 如何验证缺少子字符串(以积极的方式)。谢谢。

最佳答案

原始模式注意事项

您的原始模式包含非常奇特的 agg{0} .需要说的是,这种模式毫无意义。由于连接和重复之间的方式优先级,以及 {0} 的事实恰好是模式的零重复,这 agg{0}就是ag .

因此,您得到以下内容:

Pattern PATTERN = Pattern.compile("agg{0}.*");
Matcher m = PATTERN.matcher("aged gouda yum yum!");
System.out.println(m.matches()); // prints "true"

为了说明重复和连接如何相互作用,以及有时需要分组,这里有更多示例:

System.out.println(  "hahaha".matches("ha{3}")    ); // prints "false"
System.out.println( "haaa".matches("ha{3}") ); // prints "true"
System.out.println( "hahaha".matches("(ha){3}") ); // prints "true"

引用资料


否定匹配

原始规范不是很清楚,但这里有一些基本事实:

这里有一些简单的例子:

System.out.println(   "Hello world!".startsWith("Hell")  ); // "true"
System.out.println( "By nightfall".endsWith("all") ); // "true"
System.out.println( "Heaven".contains("joy") ); // "false"

System.out.println( ! "Hello world!".startsWith("Hell") ); // "false"
System.out.println( ! "By nightfall".endsWith("all") ); // "false"
System.out.println( ! "Heaven".contains("joy") ); // "true"

负面环视

如果结合Java的逻辑补码和String的非正则表达式谓词检查对您不起作用,您可以使用否定环视来否定模式上的匹配。

一般来说,如果要否定什么^pattern$匹配,出于某种原因,您需要在正则表达式本身中完成此操作,您可以匹配 ^(?!pattern$).*相反(也许使用单行模式,所以点匹配所有内容)。

这是一个匹配 a*b* 的例子,并使用负前瞻否定它:

    String[] tests = {
"aaabb",
"abc",
"bba",
"aaaa",
"bbbbbb",
"what is this?",
};
for (String test : tests) {
System.out.printf("[%s] %s - %s %n",
test,
test.matches("a*b*"),
test.matches("(?!a*b*$).*")
);
}

上面的打印:

[aaabb] true - false 
[abc] false - true
[bba] false - true
[aaaa] true - false
[bbbbbb] true - false
[what is this?] false - true

引用资料

相关问题


回到问题

如果您坚持使用负面环视,则可以根据您的实际需要使用以下两种模式之一:

关于Java\Pattern - 如何编写验证字符串缺失的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3177926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com