我有几个网址,例如下面的网址,其中包含-XX-
个字母,并在网址末尾包含xxxxxxxxx
个密钥。
http://vayes-eys.dev/shoe-for-ladies/high-hields/7-pont-with-silver-stripes-PD-0a8564q56
或
http://vayes-eys.dev/news/europe/england/cricket-news/josh-darpant-is-on-the-way-to-rome-NS-e3q3s2wq4q
我想做的是;首先检查网址中是否存在-NS-
,-PD-
或-SP-
,然后获取-XX-
部分及其后的部分,例如:e3q3s2wq4q
。< / p>
到目前为止,我所做的是:
$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);
}
这给了我以下数组,但我不确定它是否正确。
array(
0 => 0a8564q56
1 => -PD-
)
我需要的是PD
和0a8564q56
。谢谢你的帮助。
答案 0 :(得分:2)
您可以使用
'~-(NS|PD|SP)-([^-/]+)~'
或
'~-(NS|PD|SP)-([A-Za-z0-9]+)~'
请参阅regex demo
<强>详情:
-
- 字面连字符(NS|PD|SP)
- 第1组捕获其中一个值:NS
,PD
或SP
-
- 连字符([^-/]+)
- 除-
和/
以外的1个或多个字符(分隔符)。如果您只有字母和数字,则可以改为使用[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);
您的值在第1组和第2组。