我想从一些 URL 中提取两个值。示例网址:cricket-ck-game-playhand-ball-hb-game-playvolley-ball-vb-game-playsoccer-sc-game-play我想分别提取完整的游戏名称及其短名称,忽略-game-playURL 末尾的部分。我尝试了以下代码,它返回“ck”、“hb”、“vb”、“sc”,但不返回全名。preg_match("/(?<=-)[^-]*(?=-game-play)/", $uri, $game);我得到的实际结果:array(1) { [0]=> string(2) "ck"}预期成绩: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" }
3 回答
慕仙森
TA贡献1827条经验 获得超7个赞
preg_match("/(.+)-([a-z]{2})-/i", $uri, $game);
抓取以破折号为边界的两个字母之前的所有内容,然后抓取这两个字母。
慕妹3242003
TA贡献1824条经验 获得超6个赞
如果短名称之前的部分总是超过 3 个字符并且短名称总是由 2 个字符组成,[a-zA-Z]
您可以使用 2 个捕获组,使用量词{3,}
并{2}
匹配字符。
\b(\w{3,}(?:-(?:\w{3,}))*)-(\w{2})-game-play\b
解释
\b
词界(
捕获组 1\w{3,}
匹配一个单词字符 3 次以上(?:-\w{3,})*
重复 0+ 次匹配-
和 3 个或更多单词字符)
亲密团体(
捕获组 2[a-zA-Z]{2}
匹配单词字符 2 次(根据评论))
关闭群组-game-play
字面匹配\b
词界
另一种选择是使用preg_split并在捕获组中由连字符包围的 2 个字符 az 上拆分并匹配其余字符:
$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
)
- 3 回答
- 0 关注
- 232 浏览
添加回答
举报
0/150
提交
取消