Php 正则表达式匹配可选部分

Php 正则表达式匹配可选部分,php,regex,escaping,Php,Regex,Escaping,例如,我这里有两个可能的字符串 /user/name 及 我正试图找出合适的正则表达式来匹配以下结果: Array ([0] => /user/name [1] => user [2] => name) 我认为我遇到的问题是,问号和后面的GET查询是可选的,并且只会在某些时候出现。我尝试了许多不同的方法,但似乎无法找到与字符串匹配的正则表达式,无论?**是否存在。不要使用正则表达式 使用,以及 不要使用正则表达式 使用,以及 在regex中,您可以使用?参数指定一些内容作为

例如,我这里有两个可能的字符串

/user/name

我正试图找出合适的正则表达式来匹配以下结果:

Array ([0] => /user/name [1] => user [2] => name)
我认为我遇到的问题是,问号和后面的GET查询是可选的,并且只会在某些时候出现。我尝试了许多不同的方法,但似乎无法找到与字符串匹配的正则表达式,无论?**是否存在。

不要使用正则表达式

使用,以及

不要使用正则表达式

使用,以及


在regex中,您可以使用
参数指定一些内容作为可选内容。例如,regex
n?ever
匹配
ever
never

在您的情况下,您可能需要类似于
/([A-Za-z0-9]+)/([A-Za-z0-9]+)(\?重定向=1)?

这将匹配
/…/…
(假定“…”由字母和数字组成)或
/…/…?重定向=1

如果问号后面可能有更多的标志,而不仅仅是
redirect=1
,请尝试更一般的:


/([A-Za-z0-9]+)/([A-Za-z0-9]+)(\?[A-Za-z0-9]+=[A-Za-z0-9]+)(&[A-Za-z0-9]+=[A-Za-z0-9]+)*
在正则表达式中,您可以使用
参数指定某个选项。例如,regex
n?ever
匹配
ever
never

在您的情况下,您可能需要类似于
/([A-Za-z0-9]+)/([A-Za-z0-9]+)(\?重定向=1)?

这将匹配
/…/…
(假定“…”由字母和数字组成)或
/…/…?重定向=1

如果问号后面可能有更多的标志,而不仅仅是
redirect=1
,请尝试更一般的:

/([A-Za-z0-9]+)/([A-Za-z0-9]+)(\?[A-Za-z0-9]+=[A-Za-z0-9]+)(&[A-Za-z0-9]+=[A-Za-z0-9]+)*
是“零或一”量词。因此,您可以将
(\?*)
附加到正则表达式中,正则表达式可以选择匹配零个或一个文本问号实例,后跟任意数量的字符。

是“零或一”量词。因此,您可以将
(\?.*)
附加到您的正则表达式中,正则表达式可以选择匹配零个或一个后跟任意数量字符的文本问号实例

preg_match('{^/(user)/(name)(?=\?redirect=1)?$}', $subject, $matches);
这是一个很好的例子。它不会包含在比赛中

但是就像其他答案一样,你不应该使用正则表达式来解析URL。只需发布具体问题的实际答案,以确保完整性

这是一个很好的例子。它不会包含在比赛中


但是就像其他答案一样,你不应该使用正则表达式来解析URL。只需发布具体问题的实际答案以确保完整性。

您尝试过什么?您是否尝试过使用可选组?请发布您目前拥有的内容。我目前拥有的一个/\/(.*)\/(.*)(.*))(.*)/I,但如果不存在?redirect=1,则不会返回匹配项。您尝试了什么?您是否尝试过使用可选组?请发布到目前为止您拥有的内容。我目前拥有的是/\/(.*)\/(.*)(.-)(.*)/I,但如果不存在?redirect=1,则不会返回匹配结果。唯一的问题是数组匹配结果。[2] =>name?redirect=1我需要它只生成名称。[3] 可以是后面的值吗?唯一的问题是数组匹配结果。[2] =>name?redirect=1我需要它只生成名称。[3] 这是一个好主意,让我试一试,看看它是否能满足我的需要,我能让它满足我的需要。谢谢你,先生,谢谢大家!这是个好主意,让我试一试,看看它是否与我正在努力做的工作相符。我能够使它与我需要的工作相符。谢谢你,先生,谢谢大家!
$result = parse_url("/here/is/a/path?query=string");
$pieces  = explode("/", $result['path']);
preg_match('{^/(user)/(name)(?=\?redirect=1)?$}', $subject, $matches);