1

我需要一个正则表达式,它仅在字符串后面没有正斜杠(/)字符并且我想匹配整个字符串时才匹配字符串。

例如下面的字符串应该匹配

/Raj/details/002-542545-1145457

但不是这个

/Raj/details/002-542545-1145457/show

我尝试使用Negative Lookahead来实现此答案所指定的目标。

我的代码是这样的。

pattern = Pattern.compile("/.*/details/(?!.*/)");
matcher = pattern.matcher(text);
if(matcher.matches()) {
  System.out.println("success");
} else {
System.out.println("failure");
}

它正在失败。但是,如果我使用matcher.find()它,它就会成功。

请帮助我理解为什么它不匹配以及实现此目的的正则表达式?

4

3 回答 3

3

^/[^/]+/details/[^/]+$

将匹配

/Raj/details/002-542545-1145457

但不是

/Raj/details/002-542545-1145457/show
于 2012-11-16T12:28:03.040 回答
1

我认为你的正则表达式没有做你期望它做的事情。您缺少捕获 之后的数值数据的表达式的一部分/details/

您的正则表达式是肯定的,.find()因为您当前表达式的字符串中有一个匹配项,但该字符串与表达式不完全匹配,这就是为什么.matches()不起作用。

您当前的表达式不是贪婪搜索,它一到达就停止匹配/details/. 如果有/after则匹配失败/details/,因此它不匹配之间的字符/details/和任何潜在的字符/- 在您的示例中,数字数据。这会导致.matches()失败,即使仍然存在正匹配。

如果您希望它匹配整个字符串直到并包括数字但之后不匹配,则以下正则表达式应该可以工作:/.*/details/[0-9\-]*(?!.*/)- 两者都.find().matches()返回正数,因为表达式现在匹配所有内容到潜在的/.

于 2012-11-16T12:23:23.140 回答
0

你的正则表达式看起来不错。matcher()仅匹配整个字符串,而find()匹配字符串中的下一个子字符串。

于 2012-11-16T12:19:32.543 回答