Java问题的URI正则表达式

时间:2013-12-11 23:48:25

标签: java regex

我正在尝试创建一个适用于以下内容的正则表达式:

GET://HOSTNAME1234:14159?sim=C:\sim.zip&bif=C:\bif.txt&wpt=C:\wpt.txt 或者更简单:

GET :// HOSTNAME1234 : 14159 ? sim = C:\sim.zip & bif = C:\bif.txt & wpt = C:\wpt.txt

有了这个:

(\w+)://(\w+)(:(\d+)\??)?((\w+)=([\/\.\\:\w]+)&?)*

我希望得到的是这样的:

0: [0,72] GET://HOSTNAME1234:14159?arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt
1: [0,3] GET
2: [6,18] HOSTNAME1234
3: [18,24] :14159
4: [19,24] 14159
5: [57,72] arg2=C:\wpt.txt
6: [57,61] arg2
7: [62,72] C:\wpt.txt

其中6和7表示我想要的,但是我没有看到“arg0”或“arg1”。我认为我对+*命令做错了,但是没有任何组合安排似乎有效。

我正在使用此工具来帮助我:http://www.regexplanet.com/advanced/java/index.html / http://fiddle.re/h9b88

1 个答案:

答案 0 :(得分:1)

要匹配的字符串:

GET://HOSTNAME1234:14159?arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt

尽管您真的应该使用URL parser来执行此操作:

更新的方法(适用于完整的原始字符串)

((\w+):\/\/(\w+):(\d+)\??|([^&]*?)=([^&]*)?)

工作示例:http://regex101.com/r/pL2wV9


第一种方法(有效,但需要循环)

将网址分为两部分:

使用(\w+):\/\/(\w+):(\d+)\?(.*$)将网址分解为:http://regex101.com/r/pQ1vS9

MATCH 1

  1. GET

  2. HOSTNAME1234

  3. 14159

  4. arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt

  5. 然后在第4组,使用([^&]*?)(?==)=?([^&]*)?匹配查询字符串一旦您捕获它,并迭代它:http://regex101.com/r/bX3uM4

    MATCH 1

    1. arg0

    2. C:\sim.zip

    3. MATCH 2

      1. arg1

      2. C:\bif.txt

      3. MATCH 3

        1. arg2

        2. C:\wpt.txt


        3. 免责声明:这是一个非常糟糕的主意,虽然我想知道是否可以将其删除,但使用网址解析器是一种更快,更准确的路径。