正则表达式匹配不是特定子字符串的东西
我正在寻找一个正则表达式,它将匹配以一个子字符串开头并且不以特定子字符串结尾的字符串。
例:
// Updated to be correct, thanks @Apocalisp
^foo.*(?<!bar)$
应匹配任何以“foo”开头并且不以“bar”结尾的内容。 我知道[^ ...]语法,但是我找不到任何能够为字符串而不是单个字符做的事情。
我专门为Java的正则表达式做这件事,但我已经遇到过,所以其他正则表达式引擎的答案也会很好。
感谢@Kibbee验证这是否也适用于C#。
我认为在这种情况下,你想要消极的后顾之忧 ,就像这样:
foo.*(?<!bar)
已验证@ Apocalisp的回答使用:
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern p = Pattern.compile("^foo.*(?<!bar)$");
System.out.println(p.matcher("foobar").matches());
System.out.println(p.matcher("fooBLAHbar").matches());
System.out.println(p.matcher("1foo").matches());
System.out.println(p.matcher("fooBLAH-ar").matches());
System.out.println(p.matcher("foo").matches());
System.out.println(p.matcher("foobaz").matches());
}
}
这个输出是正确的答案:
false
false
false
true
true
true
我对Java正则表达式不熟悉,但Pattern Class的文档建议您可以使用(?!X)作为非捕获零宽度负向预测(它在该事件中寻找不是X的东西,而不捕获它作为反向引用)。 所以你可以这样做:
foo.*(?!bar) // not correct
更新 :Apocalisp的权利,你想负反面。 (你正在检查。*匹配不会以bar结尾)
链接地址: http://www.djcxy.com/p/77015.html上一篇: Regex to match against something that is not a specific substring