2017-03-03 62 views
1

我的java字符串如https://example.com?id=iuyu1223-uhs12&event=update 所以我想id&之间获得串包括id&。但在某些情况下,&可能不会像https://example.com?id=iuyu1223-uhs12那样出现,所以需要选择完整的字符串直到结束。我正在使用正则表达式(SAAS_COMMON_BASE_TOKEN_ID.*?&)。它与第一个字符串一起工作,但第二个失败。我们可以有或正则表达式的条件,这样我会得到导致像id=iuyu1223-uhs12&id=iuyu1223-uhs12单正则表达式来两个字符串之间找到字符串或用单串才开始

+0

请参阅[Java正则表达式OR运算符](http://stackoverflow.com/questions/2031805/java-regular-expression-or-operator)。 –

回答

1

您可以使用

id=[^&]*&? 

DEMO

  1. id=我们所需要的关键
  2. [^&]*捕获跟随但符号&一切。
  3. &?如果符号如下,则捕获它,否则不要。 ?表示它是可选的。
+0

它不会匹配'base-id = 1234'吗? – anubhava

+0

@anubhava我在[原始版本的答案](http://stackoverflow.com/revisions/42573175/1)中包含了积极的向前看,但后来才意识到它使得它变得太复杂了,因为这样的参数并不存在于url中,所以删除它。 –

3

您可以使用此正则表达式来捕捉,然后&或行结束id=...值:

(?<=[?&])id=[^&]*(?:&|$) 

RegEx Demo

  • (?<=[?&])向后看,声称我们有?&之前id=
  • id=[^&]*将匹配后跟0个或多个字符id=直到击中前&
  • (?:&|$)比赛&或行结束

全场比赛将是:

  1. id=iuyu1223-uhs12& - 案例I
  2. id=iuyu1223-uhs12 - 案例II
+0

我可以知道为什么您从我的答案中删除验收标记? – anubhava

+0

它与您已共享的字符串正则表达式绝对正常工作。由于复杂性,我刚刚删除了验收标记。您提供的解决方案能够处理所有情况,但对我而言,这种复杂情况下的级别不会存在。谢谢Anubhava。 – Navnath

+0

好的,谢谢你的评论并给出你的理由。你应该记住,这些问题和答案将会被将来面对类似问题的许多程序员阅读和使用,所以最好覆盖所有的情况。 – anubhava

相关问题