我正在尝试创建一个适用于以下内容的正则表达式:
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
答案 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
GET
HOSTNAME1234
14159
arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt
然后在第4组,使用([^&]*?)(?==)=?([^&]*)?
匹配查询字符串一旦您捕获它,并迭代它:http://regex101.com/r/bX3uM4
MATCH 1
arg0
C:\sim.zip
MATCH 2
arg1
C:\bif.txt
MATCH 3
arg2
C:\wpt.txt
免责声明:这是一个非常糟糕的主意,虽然我想知道是否可以将其删除,但使用网址解析器是一种更快,更准确的路径。