我想从一段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

解决方案 »

  1.   

    先把所有的url都decodeURIComponent一下,%3D转换成等号,再正则。decodeURIComponent('www.xxxxxxxxxid%3D123456788.com')
      

  2.   


    确定不一样,把括号里面的|两旁的内容分开来,单独用
    \\.*id=\\d*
    \\.*id%3D\\d*
    都是可以的,但是用了或者就必须用+号了,用*号不行,这是正则里面的规定吗?
      

  3.   

    intelliJ,scala,代码转义就是用双\\
      

  4.   

    对啊,你的接受url的代码也不能直接处理这2种url,也要解码后才能执行吧。
      

  5.   

    我拿eclipse3.6+jdk7+jre7测试你的正则,都*都能匹配到你说的两种情况。
    还有就是你如果要匹配id前的任意字符,直接.,不用转义。
      

  6.   


    我最终发现问题是因为我不够仔细,URL的确有两种情况,而一种情况是URL中有两处都有"id=",但是一处是跟了数字,一处是没跟数字的,没跟数字的情况在前,所以先匹配出来了,后面有id=数字的字符串也就不再匹配了,而我没有发现这种情况,一直以为是后面的数字没有匹配到.用+使数字必须出现才真正符合我的匹配要求,所以用+一直是对的.谢谢各位的热心解答!