我想从一段url中定位xxxxxid=123456789这样的一段字符串
但是有些url中"="被编码变成了%3D,所以说url就有两种形式了
我的正则表达式是这么写的:
\\.*id(=|%3D)\\d*
表示的是在id两个字符前可以有任意个任意的字符,紧接着id两个字符是等号=或者等号的utf-8编码%3D,再接着就是一串数字但是,对于两种形式的url,如:
1,www.xxxxxxxxxid=12345566777.com
2,www.xxxxxxxxxid%3D123456788.com
这个正则表达式只能匹配第一种形式的url,而当我把正则表达式最后的*换成+后,这个正则表达式就可以匹配两种形式的url了,这是为什么呢?为什么用*会使前面括号中的=或者%3D没起作用一样呢?正则表达式URL
但是有些url中"="被编码变成了%3D,所以说url就有两种形式了
我的正则表达式是这么写的:
\\.*id(=|%3D)\\d*
表示的是在id两个字符前可以有任意个任意的字符,紧接着id两个字符是等号=或者等号的utf-8编码%3D,再接着就是一串数字但是,对于两种形式的url,如:
1,www.xxxxxxxxxid=12345566777.com
2,www.xxxxxxxxxid%3D123456788.com
这个正则表达式只能匹配第一种形式的url,而当我把正则表达式最后的*换成+后,这个正则表达式就可以匹配两种形式的url了,这是为什么呢?为什么用*会使前面括号中的=或者%3D没起作用一样呢?正则表达式URL
确定不一样,把括号里面的|两旁的内容分开来,单独用
\\.*id=\\d*
\\.*id%3D\\d*
都是可以的,但是用了或者就必须用+号了,用*号不行,这是正则里面的规定吗?
还有就是你如果要匹配id前的任意字符,直接.,不用转义。
我最终发现问题是因为我不够仔细,URL的确有两种情况,而一种情况是URL中有两处都有"id=",但是一处是跟了数字,一处是没跟数字的,没跟数字的情况在前,所以先匹配出来了,后面有id=数字的字符串也就不再匹配了,而我没有发现这种情况,一直以为是后面的数字没有匹配到.用+使数字必须出现才真正符合我的匹配要求,所以用+一直是对的.谢谢各位的热心解答!