java,正则表达式字符串之间不包含一组单词/

时间:2013-11-13 17:38:06

标签: java regex

我知道这似乎是一个常见的问题,但无法摆脱我的问题搜索。 我需要一个正则表达式,它只匹配不以一组指定单词开头并被/包围的字符串。 例如:

/harry/white
/sebastian/red
/tom/black
/tomas/green

我不希望字符串以/ harry /和/ tom /开头,所以我希望

/harry/white     NO
/sebastian/red   YES
/tom/black       NO
/tomas/green     YES

1) ^/(?!(harry|tom)).*    doesn't match /tomas/green
2) ^/(?!(harry|tom))/.*   matchs nothing
3) ^/((harry|tom))/.*     matchs the opposite

什么是正确的正则表达式?如果有人解释我为什么1和2错了,我会很感激。 请不要怪我:) 感谢。

2 个答案:

答案 0 :(得分:2)

你需要在负面预测中为这两者添加结尾斜杠,而不是在外面:

^/(?!(harry|tom)/).*

不添加斜杠,将与tom中的tomas匹配,否则前瞻不会满足。

答案 1 :(得分:1)

尝试:

^(?!/(harry|tom)/).*

为什么数字1错误:前瞻应该确保harrytom后跟斜杠。

为什么数字2错了:忽略前瞻;请注意,该模式试图匹配字符串开头的两个斜杠。