正义和符号之间的正则表达式

时间:2015-04-10 21:30:05

标签: regex url

我尝试使用正则表达式在&client=&之间的网址中找到字符串

我考虑过像这样使用它:client=[a-zA-Z]+但它会停在_所以我真的需要它&client=&

URL:

/search?q=tuition&btnG.x=0&btnG.y=0&site=transfer_credit&client=transfer_credit&proxystylesheet=transfer_credit&output=xml_no_dtd&proxycustom=HOME

site=之后的字符串总是不同的,这对于regex来说应该是唯一的。

Here是我对正则表达式的尝试。

4 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

client=[^&]+

RegEx Demo

这将匹配任何不是&的任何字符中的一个或多个。

答案 1 :(得分:1)

使用此正则表达式:

client=(.*?)&

Demo here

我使用惰性量化器*?来匹配&符号前可能的字符数。要获得该值,您可以将其放入捕获组:client=(.*?)&并摆脱前瞻(这是一种"扩展")。以下是如何使用JavaScript编码的示例:



var re = /client=(.*?)&/; 
var str = '/search?q=tuition&btnG.x=0&btnG.y=0&site=transfer_credit&client=transfer_credit&proxystylesheet=transfer_credit&output=xml_no_dtd&proxycustom=HOME';
 
if ((m = re.exec(str)) !== null) {
    document.getElementById("res").innerHTML = m[1]
}

<div id="res"/>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您没有提供任何关于为什么尝试使用正则表达式解析URL查询字符串参数的上下文,但一般情况下这不是一个好主意。

以下是目前的答案,他们都有问题:

client=[^&]+
client=.+?
client=(.*?)&

由于以下一个或多个原因,所有这些答案都将失败:

  1. 错误地将可能包含单词client的其他查询参数名称作为子字符串(例如other_client)。

  2. 如果client参数值为空,则不匹配。也许这就是你想要的,但是你无法区分client值为空,client参数完全丢失。

  3. client值后需要&符号。因此,它无法识别client是指定的最后一个查询参数的有效查询字符串。查询字符串中编码的查询参数的顺序不保证一致。它可以是第一个参数,最后一个参数,也可以是介于两者之间的任何位置。

  4. 假设&符号&是唯一可用于查询字符串以分隔查询参数的字符。可以使用分号字符;代替。

  5. 这些答案很好地证明了使用正则表达式解析URL查询字符串充满了危险。很难说明查询字符串参数及其值可以假设的所有有效变体。

    如果你必须使用正则表达式,那么我认为将适用于这个特定情况。也许它也包含一个我不知道的错误?

    \bclient=[^&;]*
    

    但是如果您有选择,最好使用库(使用您选择的语言)将URL解析为其组成部分。

答案 3 :(得分:0)

您可以将正则表达式更改为:

client=.+?

使用regex101链接:

https://regex101.com/r/lQ9hD0/6

顺便说一句,您可以使用捕获组来捕获内容:

client=(.+?)