我有:
stackoverflow.com/.../link/Eee_666/9_uUU/66_99U
/Eee_666/9_uUU/66_99U
的正则表达式是什么?
Eee_666
、9_uUU
和 66_99U
是随机值
我该如何解决?
就这么简单:
$link = "stackoverflow.com/.../link/Eee_666/9_uUU/66_99U";
$regex = '~link/([^/]+)/([^/]+)/([^/]+)~';
# captures anything that is not a / in three different groups
preg_match_all($regex, $link, $matches);
print_r($matches);
请注意,尽管它会吃掉任何期望/
字符(包括换行符),因此您要么也想排除其他字符,要么仅向引擎提供格式的字符串。
观看有关 regex101.com 的演示。
你可以
在这里使用'K
来使我更彻底。
stackoverflow'.com/.*?/link/'K([^/'s]+)/([^/'s]+)/([^/'s]+)
请参阅演示。
https://regex101.com/r/jC8mZ4/2
如果你不知道字符串的长度如何:
$string = stackoverflow.com/.../link/Eee_666/9_uUU/66_99U
$regexp = ([^'/]+$)
结果: group1 = 66_99U
小心它也可能捕获末端线卡特
对于这种要求,使用起来更简单,preg_split与array_slice结合使用:
$url = 'stackoverflow.com/.../link/Eee_666/9_uUU/66_99U';
$elem = array_slice(preg_split('~/~', $url), -3);
print_r($elem);
输出:
Array
(
[0] => Eee_666
[1] => 9_uUU
[2] => 66_99U
)