首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java问题的URI正则表达式

Java问题的URI正则表达式
EN

Stack Overflow用户
提问于 2013-12-11 23:48:25
回答 1查看 246关注 0票数 0

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

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]+)&?)*

我希望得到的是这样的东西:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

  1. GET
  2. HOSTNAME1234
  3. 14159
  4. arg0=C:\sim.zip&arg1=C:\bif.txt&arg2=C:\wpt.txt

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

匹配1

  1. arg0
  2. C:\sim.zip

匹配2

  1. arg1
  2. C:\bif.txt

匹配3

  1. arg2
  2. C:\wpt.txt

免责声明:--这是一个非常糟糕的主意,虽然我想知道我是否能做到这一点,但使用解析器是一种更快、更精确的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20532341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档