Java Regex:Find返回true,但其中一个group()无法返回值

时间:2013-07-16 13:52:46

标签: java regex

我遇到了Java中的正则表达式问题。我测试了我的正则表达式,似乎匹配得很好,但其中一组正在返回一个空值。它能够找到正确数量的组,但我不知道为什么第二个序列似乎以错误的索引开始和结束。

模式:

^http\://[\w\-\.]+\.[a-zA-Z]{2}/[\w]{2}/[\w\-]+/(uvw_)+([a-zA-Z0-9]?)+([\w\-]*)$

待测数据:

http://www.testing.ca/en/ABC-DEF/uvw_XY5114_2-Z_1_54321

寻找:XY5114

以下是regexplanet的截图: Test Results here

编辑:我使用以下模式实现了这项工作:

^http\://[\w\-\.]+\.[a-zA-Z]{2}/[\w]{2}/[\w\-]+/(uvw_)+([a-zA-Z0-9]*)([\w\-]*)$

另一个选项建议:

^http\://[\w\-\.]+\.[a-zA-Z]{2}/[\w]{2}/[\w\-]+/(uvw_)+([a-zA-Z0-9]+)([\w\-]*)$

2 个答案:

答案 0 :(得分:2)

删除“?”在([a-zA-Z0-9]?)+。 “?”意味着它是可选的,而“+”意味着你至少需要一个,这是一种矛盾。

编辑:您还必须在组内移动“+”。

这应该有效:

^http\://[\w\-\.]+\.[a-zA-Z]{2}/[\w]{2}/[\w\-]+/(uvw_)+([a-zA-Z0-9]+)([\w\-]*)$

答案 1 :(得分:0)

您只想提取网址的最后一部分并用下划线拆分它是否正确?在这种情况下,请执行以下操作:

String url = ....;
int lastSlash = url.lastIndexOf('/');
String[] parts = url.substring(lastSlash + 1).split("_");