Php preg_match从字符串返回多个值
我想从一些URL中提取两个值 示例URL:Php preg_match从字符串返回多个值,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我想从一些URL中提取两个值 示例URL: 板球比赛 手球hb游戏 截击球vb游戏玩法 足球sc游戏玩法 我想分别提取游戏全名及其短名,忽略URL末尾的-游戏玩法部分 我尝试了以下返回“ck”、“hb”、“vb”、“sc”的代码,但没有返回全名 preg_match("/(?<=-)[^-]*(?=-game-play)/", $uri, $game); 预期成果: case:1 (In case of example 1) - array(2) { [0]=> st
板球比赛
手球hb游戏
截击球vb游戏玩法
足球sc游戏玩法
-游戏玩法
部分
我尝试了以下返回“ck”、“hb”、“vb”、“sc”的代码,但没有返回全名
preg_match("/(?<=-)[^-]*(?=-game-play)/", $uri, $game);
预期成果:
case:1 (In case of example 1) - array(2) {
[0]=>
string(7) "cricket"
[1]=>
string(2) "ck"
}
case:2 (In case of example 2) - array(2) {
[0]=>
string(9) "hand-ball"
[1]=>
string(2) "hb"
}
抓取以破折号为边框的两个字母之前的所有内容,然后抓取这两个字母。也许,这个表达式可能与您的想法有些接近:
(.*)-(.{2})(?=-game-play)
或
如果短名称前的部分始终超过3个字符,且短名称始终由2个字符组成,则可以使用2个捕获组,使用量词
{3,}
和{2}
匹配字符
\b(\w{3,}(?:-(?:\w{3,}))*)-(\w{2})-game-play\b
解释
单词边界\b
捕获组1(
将一个单词字符匹配3+次\w{3,}
重复0多次匹配(?:-\w{3,})*
和3个或更多单词字符-
关闭组)
捕获组2(
匹配两次单词字符(根据注释)[a-zA-Z]{2}
关闭组)
逐字匹配-游戏玩法
单词边界\b
$pattern = "/-([a-z]{2})-.*/";
$str = "cricket-ck-game-play";
print_r(preg_split($pattern, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
结果
Array
(
[0] => cricket
[1] => ck
)
不会产生所需的输出。游戏名称可以有连字符。@Emma谢谢!你的条件1非常有效!这些都是有效的,但你不需要向前看<代码>(.*)-(.*)-游戏玩法非常优雅。
ck
etc前面的部分总是超过2个字符吗?短名称总是2个字符吗?它们总是a-z字符吗?是的,“ck”之前的部分总是超过2个字符,而且短名称总是2个字符,并且总是字母表(有时可以是大写字母或Uc字母),谢谢!它在任何条件下都能完美工作。
\b(\w{3,}(?:-(?:\w{3,}))*)-(\w{2})-game-play\b
$pattern = "/-([a-z]{2})-.*/";
$str = "cricket-ck-game-play";
print_r(preg_split($pattern, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
Array
(
[0] => cricket
[1] => ck
)