使用正则表达式捕获/包含并在

时间:2016-12-08 21:21:21

标签: java regex

我有正则表达式

[/].([a-z/!@$%^&*()-+><~*\.]+)

我试图捕获/(包含)之后的所有内容直到#或? (不包括)。

我试过正则表达式的字符串:

/hello.there#test正确地给了我/hello.there

然而尝试它只是/没有任何组合。它也不会对字符串/ h中的任何内容进行分组。我认为它会这样做,因为我在集合中包含a-z来捕获。

如何在排除#和?之后改进正则表达式以便捕获/(包含)和所有内容?在#和?之后忽略任何事情?

谢谢

2 个答案:

答案 0 :(得分:2)

当你需要匹配除了其他一些字符之外的一些字符时,你应该想到否定的字符类

要匹配任何字符,但#?使用[^#?]。要匹配零个或多个匹配项,请在其后添加*。使用

/([^#?]*)

请参阅regex demo

Java demo

String str = "/hello.there#test";
Pattern ptrn = Pattern.compile("/([^#?]*)");
Matcher matcher = ptrn.matcher(str);
if (matcher.find()) {
    System.out.println(matcher.group());  // => /hello.there
    System.out.println(matcher.group(1)); // => hello.there
}

答案 1 :(得分:2)

如果您想在#?后忽略字符,请直接排除这些字符。

(/[^#?]*)

在此正则表达式中,/位于群组中,因此您可以捕获它,[^#?]包含除#?之外的所有字符。(当然,任何字符)之后会忽略)