1

我在 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 的截图: 测试结果在这里

编辑:我通过使用以下模式得到了这个工作:

^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\-]*)$
4

2 回答 2

2

去除 ”?” 在([a-zA-Z0-9]?)+. 这 ”?” 表示它是可选的,而“+”表示您至少需要一个,这有点矛盾。

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

这应该有效:

^http\://[\w\-\.]+\.[a-zA-Z]{2}/[\w]{2}/[\w\-]+/(uvw_)+([a-zA-Z0-9]+)([\w\-]*)$
于 2013-07-16T14:00:05.910 回答
0

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

String url = ....;
int lastSlash = url.lastIndexOf('/');
String[] parts = url.substring(lastSlash + 1).split("_");
于 2013-07-16T14:03:58.220 回答