匹配文本中两个字符串之间首次出现的字符串

时间:2015-12-07 17:35:54

标签: php regex string

问题

我想选择两个字符串之间的第一个内容。例如:

https://subdomain.domain.com/lobby/het/login?retUrl=https://subdomain.domain.com/lobby/het/responsible?retUrl=https://uat-api.domain.com/forms/authorise-client?retUrl=https://subdomain.domain.com/lobby/het/login?retUrl=https://subdomain.domain.com/lobby/het/testing?retUrl=https://uat-api.domain.com/forms/authorise-client?locale=en-GB&client_id=123&response_type=token&redirect_uri=https://subdomain/rem/rep/sol.html&prompt=0&state=authorise-client

我们可以在上面的URL中看到retUrl多次出现。

问题

如何使用正则表达式仅选择第一个retUrl(上面的字符串中的粗体)的内容?那么,我们需要第一个以“retUrl =”开头的字符串,并在第一次出现时结束?在它之后。这甚至可能吗?

尝试失败

(?=retUrl=)(.*\n?)(?=\?)
(retUrl=)(.*)$\?

2 个答案:

答案 0 :(得分:2)

这应该适合你:

/retUrl=([^\?]*)/

使用([^\?]*),您可以简单地说直到问号为止。所以你可以使用preg_match()的正则表达式,它只会给你那个正则表达式的第一个匹配。

答案 1 :(得分:1)

preg_match只找到第一场比赛。你去吧。

相比之下,preg_match_all找到所有匹配项。