java - 正则表达式: "is followed by a slash or is the end of the line"

标签 java regex

我正在尝试使用 Java 编写一个正则表达式来解析另一个正则表达式。我想从源正则表达式中提取命名组(它们表示 URL 中用斜杠分隔的参数)。此外,源字符串可能以斜杠开头和结尾,也可能不以斜杠开头和结尾。

例如,对于两个源字符串:

(?<name>john)/(?<facet>aaa/bbb/ccc/?)

/(?<name>john)/(?<facet>aaa/bbb/ccc/?)/

我想要一个正则表达式来将它们提取为命名组:

(?<name>john)(?<facet>aaa/bbb/ccc/?)

我尝试过:

(^|.*/)(?<param>\(\?<[^>]+>[^\)]+\))(/.*|$)

但这只会返回 (?<name>john)作为一个名为“param”的组,而不是 (?<facet>aaa/bbb/ccc/?) !!

当我删除(/.*|$)时部分,均退回!但我想要这个结束条件来确保参数后跟斜线或位于行尾...

你知道为什么吗(/.*|$)防止找到第二个参数?

最佳答案

您可以使用以下正则表达式:-

"(?:/|^)(\\(\\?<.*?>.*?\\))(?=/|$)"

并使用Matcher@find方法提取所有匹配项。

String str = "(?<name>john)/***(?<facet>aaa/bbb/ccc/?)/(?<not>aaa/bbb/?)***";
Matcher matcher = Pattern.compile("(?:/|^)(\\(\\?<.*?>.*?\\))(?=/|$)").matcher(str);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:-

(?<name>john)

最后一个不会被打印,因为它后面既没有斜线,也没有行尾

关于java - 正则表达式: "is followed by a slash or is the end of the line",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663329/

相关文章:

java - Camel 文件输入连续读取同一文件,即使给定 noop=true

java - 将 Java/JSON Map 解码为 F# 对象

java - 计算逗号和java字符串中的任何文本

javascript - 需要帮助解析 Markdown ,删除斜体 (*) 但不是粗体 (**)

java - 将哈希函数委托(delegate)给 hibernate 中未初始化的委托(delegate)会导致更改哈希代码

java - 我得到 "file not found: example.java"并将我的文件放在 jre/bin 中

ruby - 如何一次匹配多个正则表达式的行?

python - 新手 python - 在数组中替换

javascript - 正则表达式查找所有以 = 开头并以 & 结尾的字符串

java - Java中是否可以@Query两个微服务数据库?