我遇到了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\-]*)$
答案 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("_");