我想從一些 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條經驗 獲得超8個贊
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 關注
- 286 瀏覽
添加回答
舉報
0/150
提交
取消