Regex 正则表达式,它捕获行尾两个字符之间的所有内容
我希望创建一个正则表达式,它可以捕获两个“:”s之间的文本,但前提是它是“最后一组”,例如:Regex 正则表达式,它捕获行尾两个字符之间的所有内容,regex,groovy,Regex,Groovy,我希望创建一个正则表达式,它可以捕获两个“:”s之间的文本,但前提是它是“最后一组”,例如: \--- org.codehaus.groovy.modules.http-builder:http-builder:0.7.1 应返回: http-builder 需要注意的是,有可能得到如下结果: \--- org::codehaus::groovy::modules::http-builder:http-builder:0.7.1 因为输入不一定遵循约定(基于手头的问题),但所需信息总是在最
\--- org.codehaus.groovy.modules.http-builder:http-builder:0.7.1
应返回:
http-builder
需要注意的是,有可能得到如下结果:
\--- org::codehaus::groovy::modules::http-builder:http-builder:0.7.1
因为输入不一定遵循约定(基于手头的问题),但所需信息总是在最后两个“:”s中
我尝试了以下方法(不包括行尾):
1)(?
这意味着:
- 序列必须以
开头:
- 然后开始捕获
(
- 捕获所有非冒号的字符
[^::]*
- 结束捕获
)
- …在下一个冒号处
:
- 然后是另一个字符序列
[^::]*
- 在该序列之后,行必须结束
$
(不再序列)
或者,如果可以使用非贪婪匹配,也可以使用
:(.*?):[^:]*$
*
意味着捕获尽可能多的字符,而*?
意味着捕获尽可能少的字符。不过,并非所有的正则表达式实现都支持这一点
这意味着:
- 序列必须以
开头:
- 然后开始捕获
(
- 捕获所有非冒号的字符
[^::]*
- 结束捕获
)
- …在下一个冒号处
:
- 然后是另一个字符序列
[^::]*
- 在该序列之后,行必须结束
$
(不再序列)
或者,如果可以使用非贪婪匹配,也可以使用
:(.*?):[^:]*$
*
意味着捕获尽可能多的字符,而*?
意味着捕获尽可能少的字符。不过,并非所有的正则表达式实现都支持这一点。如何拆分:
并抓取下一个到最后一个段
['org.codehaus.groovy.modules.http-builder:http-builder:0.7.1',
/\--- org::codehaus::groovy::modules::http-builder:http-builder:0.7.1/].each { line ->
assert 'http-builder' == line.split(':')[-2]
}
拆分:
并抓取下一个到最后一个片段如何
['org.codehaus.groovy.modules.http-builder:http-builder:0.7.1',
/\--- org::codehaus::groovy::modules::http-builder:http-builder:0.7.1/].each { line ->
assert 'http-builder' == line.split(':')[-2]
}
很好的groovy解决方案。很好的groovy解决方案。你会如何处理具有.LikegroupId:artifactId:packaging:classifier:version
的GAV?对于我的问题,我从来没有这样做过;但你必须找出一些模式,让你知道它是不是这样。你有什么例子吗?你会如何处理具有.Like的GAVe> groupId:artifactId:packaging:classifier:version
对于我的问题,我从来没有这样的版本;但是你必须找出一些模式,让你知道这是不是真的。你有什么例子吗?