正则表达式匹配单词而不是另一个单词

时间:2012-11-16 09:02:20

标签: java regex

我需要一个匹配字符串的正则表达式,如果它以http://www.xyzabc.com开头,但该字符串不应包含单词“getJobId”。

例如:

http://www.xyzabc.com/abc          <--- should return true 
http://www.xyzabc.com/getJobId=9   <--- should return false

我尝试使用以下正则表达式:

^(http://www\.xyzabc\.com)((?!getJobId).)*$

但它不起作用。有人可以建议吗?

3 个答案:

答案 0 :(得分:2)

我刚拿走你的代码并运行它(删除多余的parens和锚点):

final String regex = "http://www\\.xyzabc\\.com((?!getJobId).)*";
System.out.println("http://www.xyzabc.com".matches(regex));
System.out.println("http://www.xyzabc.com/abc".matches(regex));
System.out.println("http://www.xyzabc.com/getJobId=9".matches(regex));

打印

true
true
false

看起来就像你想要的一样,不是吗?

更新

在你编辑的答案中你有单个反斜杠而不是双反斜杠。

答案 1 :(得分:1)

更好的正则表达式

^(http://www.xyzabc.com)(?!.*?getJobId).*$

(?!.*?getJobId)会检查getJobId是否退出,如果是,那么它将不匹配!

答案 2 :(得分:0)

使用此正则表达式http://www\.xyzabc\.com((?!getJobId)\S)*(?=\s|$)

http://www\.xyzabc\.com silded const

((?!getJobId)\S)*不包含getJobId但能够包含符号

(?=\s|$)下一个符号空格或匹配是最后一个单词