正则表达式为一组字符之间的文本

时间:2018-02-21 15:47:30

标签: regex

我一直在尝试在另外两个字符串之间获取字符串。例如,完整的字符串是;

"main.aspx?etc=2&id=c3331316-1b17-e811-a953-0022480042b3&Key=930349624&Window=true"

我正在尝试在" id ="之间获取字符串。和"&";

"c3331316-1b17-e811-a953-0022480042b3"

我登陆的正则表达式是;

id=(.*?)&

我的正则表达式尝试包括" id ="和"&"。所以他们就这样出来了;

"id=c3331316-1b17-e811-a953-0022480042b3&"

任何指针都会非常感激,因为我已经阅读过这应该有效。正则表达式是由我提供并运行第三方软件,所以我想知道我是错还是软件。我想象我是: - )

4 个答案:

答案 0 :(得分:0)

*贪婪地带着&直到找到字符串中的最后一个。 试试这个。

id=([^&]+)

正如@revo指出的那样,这将匹配并返回整个id = ...参数。 ()将值部分捕获到单独的匹配值中。这通常表示为某种类型的数组或散列,具体取决于您的编程语言。

(?<=id=)[^&]+

Revo的修改将匹配并返回id的值,而不必使用捕获反向引用。

两者都有额外的好处,就是不必拥有一个&amp;在参数的末尾。意味着这两个网址都将匹配。

&#34; main.aspx等等= 2及?的 ID = c3331316-1b17-E811-a953-0022480042b3 &安培;关键= 930349624&安培;窗口=真&#34;

&#34; main.aspx等等= 2及答案= 930349624&安培;窗口=真安培;的 ID = c3331316-1b17-E811-a953-0022480042b3 &#34;

答案 1 :(得分:0)

您正在使用匹配的群组。不要试图获得整个结果,而只是尝试分组结果。

尽管如此,您可以使用前瞻和后瞻性分组,如下所示:

(?<=id=)(.*?)(?=&)

编辑,如果id参数是网址中的最后一个参数,则正则表达式不会触发。如果您不确定它在URL中的位置,则可以使用此正则表达式:

(?<=(?:\?|&)id=)(.*?)(?=&|$)

答案 2 :(得分:0)

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

请参阅demo

此处所有其他答案未能做到的是匹配表单中的内容:

main.aspx?otherid=hek83749dbidne3

此正则表达式将确保id直接显示在?之后或&符号之后。

答案 3 :(得分:-1)

试试这个:

(?<=id=)(.*?)(?=&)

这将匹配&#34; id =&#34;之间的所有思考;和&#34;&amp;&#34;