我正在尝试创建一个正则表达式,该表达式适用于以下内容:
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
发布于 2013-12-12 00:36:42
要匹配的字符串:
GET://HOSTNAME1234:14159?arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt
尽管如此,您确实应该使用URL解析器来完成以下操作:
更新方法(工作于完整原始字符串)
((\w+):\/\/(\w+):(\d+)\??|([^&]*?)=([^&]*)?)
工作示例:http://regex101.com/r/pL2wV9
第一个方法(工作,但需要一个循环)
将URL分成两部分:
使用(\w+):\/\/(\w+):(\d+)\?(.*$)
将URL分解为:http://regex101.com/r/pQ1vS9
匹配1
GET
HOSTNAME1234
14159
arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt
然后在第4组中,一旦捕获了查询字符串,就使用([^&]*?)(?==)=?([^&]*)?
匹配它,并遍历它:http://regex101.com/r/bX3uM4
匹配1
arg0
C:\sim.zip
匹配2
arg1
C:\bif.txt
匹配3
arg2
C:\wpt.txt
免责声明:--这是一个非常糟糕的主意,虽然我想知道我是否能做到这一点,但使用解析器是一种更快、更精确的方法。
https://stackoverflow.com/questions/20532341
复制相似问题