我试过http://java.sun.com/j2se/1.4.2/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.
Run Code Online (Sandbox Code Playgroud)
我希望这返回FALSE - 因为它确实包含字符串start中的agg.总之 - 如何验证子串的缺乏(以积极的方式)谢谢.
pol*_*nts 10
你的原始图案包含非常奇特的图案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"
Run Code Online (Sandbox Code Playgroud)
为了说明重复和连接如何相互作用,以及有时需要分组,这里有一些例子:
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"
Run Code Online (Sandbox Code Playgroud)
原始规范不是很清楚,但这里有一些基本的事实:
String班有以下简单的非正则表达式的方法:
!一元boolean补码运算符
否定布尔值以下是一些简单的例子:
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"
Run Code Online (Sandbox Code Playgroud)
如果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*$).*")
);
}
Run Code Online (Sandbox Code Playgroud)
以上打印:
[aaabb] true - false
[abc] false - true
[bba] false - true
[aaaa] true - false
[bbbbbb] true - false
[what is this?] false - true
Run Code Online (Sandbox Code Playgroud)
(?<=#)[^#]+(?=#)工作?如果您坚持使用负面外观,那么您可以根据实际需要使用这两种模式中的一种:
^(?!agg).*$(参见rubular.com)
agg^(?!.*agg).*$(参见rubular.com)
agg