preg_match 从字符串返回多个值

我想从一些 URL 中提取两个值。

示例网址:

  • cricket-ck-game-play

  • hand-ball-hb-game-play

  • volley-ball-vb-game-play

  • soccer-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"  

}


繁星coding
浏览 234回答 3
3回答

慕仙森

preg_match("/(.+)-([a-z]{2})-/i",&nbsp;$uri,&nbsp;$game);抓取以破折号为边界的两个字母之前的所有内容,然后抓取这两个字母。

陪伴而非守候

也许,这个表达可能有点接近你的想法:(.*)-(.{2})(?=-game-play)演示 1或者(.*)-(.*)(?=-game-play)演示 2

慕妹3242003

如果短名称之前的部分总是超过 3 个字符并且短名称总是由 2 个字符组成,[a-zA-Z]您可以使用 2 个捕获组,使用量词{3,}并{2}匹配字符。\b(\w{3,}(?:-(?:\w{3,}))*)-(\w{2})-game-play\b解释\b&nbsp;词界(捕获组 1\w{3,}&nbsp;匹配一个单词字符 3 次以上(?:-\w{3,})*重复 0+ 次匹配-和 3 个或更多单词字符)&nbsp;亲密团体(捕获组 2[a-zA-Z]{2}&nbsp;匹配单词字符 2 次(根据评论))&nbsp;关闭群组-game-play&nbsp;字面匹配\b&nbsp;词界正则表达式演示|&nbsp;php 演示另一种选择是使用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(&nbsp; &nbsp; [0] => cricket&nbsp; &nbsp; [1] => ck)
打开App,查看更多内容
随时随地看视频慕课网APP