PHP preg_match用于在给定可选子字符串之后获取字符串部分
我有几个url,比如下面的url,其中包含PHP preg_match用于在给定可选子字符串之后获取字符串部分,php,regex,preg-match,Php,Regex,Preg Match,我有几个url,比如下面的url,其中包含-XX-字母和url末尾的xxxxxxxx键 http://vayes-eys.dev/shoe-for-ladies/high-hields/7-pont-with-silver-stripes-PD-0a8564q56 或 我想做的是;首先检查url中是否存在-NS-、-PD-或-SP-,然后获取-XX-部分及其后面的部分,例如:e3q3s2wq4q 到目前为止,我所做的是: $path = "shoe-for-ladies/high-hields
-XX-
字母和url末尾的xxxxxxxx
键
http://vayes-eys.dev/shoe-for-ladies/high-hields/7-pont-with-silver-stripes-PD-0a8564q56
或
我想做的是;首先检查url中是否存在-NS-
、-PD-
或-SP-
,然后获取-XX-
部分及其后面的部分,例如:e3q3s2wq4q
到目前为止,我所做的是:
$path = "shoe-for-ladies/high-hields/7-pont-with-silver-stripes-PD-0a8564q56"
if (preg_match('/-PD-|-NS-|-SP-/',$path)) {
preg_match("/(?<=(-PD-|-NS-|-SP-)).*/", $path, $match);
print_r($match);
}
我需要的是PD
和0a8564q56
。谢谢您的帮助。您可以使用
'~-(NS|PD|SP)-([^-/]+)~'
或
见
详细信息:
-文字连字符-
-第1组捕获以下值之一:(NS | PD | SP)
、NS
或PD
SP
-连字符-
-1个或多个字符,而不是([^-/]+)
和-
(分隔符)。如果只有字母和数字,可以使用/
[a-zA-Z0-9]+
您的值在第1组和第2组中。在
preg\u match\u all中使用使用两个捕获的组。为什么2preg\u match
s。只需将第二个放在条件中。不需要使用两次preg_match
,用捕获组构建一个模式来提取所需信息。@anubhavaif(preg_match_all('/-(NS | PD | SP)-(w+/,$path,$match)){print_r($match)}
工作得很好。谢谢,斯特里比索,我工作得很好,谢谢。两个问题:这里的一位朋友建议第二组使用(\w+)
。你的([^-/]+)
有什么不同。如果你有时间的话,也许再多一个。我们能在同一场预赛中得到前-NS-部分吗?那部分是可选的吗?如果在我的代码段中有输入,它应该是什么样子7-pont-with-silver-stripes
或stripes
?@YahyaE您可以使用regex101提供的链接更改regex,并查看它如何在更改中运行。以下是\w+
的更新。该网站还提供了右侧各部分的说明<代码>\w+
是任何字母字符、数字或分数以下的字符[^-/]+
是任何非-
或-
@WiktorStribiżew,该部分不是可选的<代码>http://abc.ltd/--
或http://abc.ltd/sth/smw/smo/--
。两者我都可以用。
array(
0 => 0a8564q56
1 => -PD-
)
'~-(NS|PD|SP)-([^-/]+)~'
'~-(NS|PD|SP)-([A-Za-z0-9]+)~'
$path = "shoe-for-ladies/high-hields/7-pont-with-silver-stripes-PD-0a8564q56";
preg_match('~-(NS|PD|SP)-([A-Za-z0-9]+)~', $path, $match);
print_r($match);