我有正则表达式
[/].([a-z/!@$%^&*()-+><~*\.]+)
我试图捕获/(包含)之后的所有内容直到#或? (不包括)。
我试过正则表达式的字符串:
/hello.there#test正确地给了我/hello.there
然而尝试它只是/没有任何组合。它也不会对字符串/ h中的任何内容进行分组。我认为它会这样做,因为我在集合中包含a-z来捕获。
如何在排除#和?之后改进正则表达式以便捕获/(包含)和所有内容?在#和?之后忽略任何事情?
谢谢
答案 0 :(得分:2)
当你需要匹配除了其他一些字符之外的一些字符时,你应该想到否定的字符类。
要匹配任何字符,但#
和?
使用[^#?]
。要匹配零个或多个匹配项,请在其后添加*
。使用
/([^#?]*)
请参阅regex 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)
如果您想在#
和?
后忽略字符,请直接排除这些字符。
(/[^#?]*)
在此正则表达式中,/
位于群组中,因此您可以捕获它,[^#?]
包含除#
和?
之外的所有字符。(当然,任何字符)之后会忽略)