我的 regfu 已被拒絕...而且我無法獲得預期的匹配。以下是需要匹配和不需要匹配的示例:NLNL LLLNLN LL LLNNLL LL LLLNLN LLL LLLLNN LL LLL <-- 跳過因為:只需要:1 到 3 對由一個空格分隔的字母哪些是連續到字符串結尾的\s{1}([A-Z]{2})很接近,但也抓住了上面skip的一部分。為什么?我需要從字符串中獲取姓名首字母。字符串中附加了 1、2 或 3 人的姓名首字母。我將用 PHP 抓取那些來存儲它們。
1 回答

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
您可以使用
if (preg_match('~(?: [A-Z]{2})+$~', $s, $match)) {
print_r(explode(" ", trim($match[0])));
}
在這里,(?: [A-Z]{2})+$匹配一個或多個空格序列,然后匹配兩個大寫 ASCII 字母直到字符串結尾,然后explode(" ", trim($match[0]))將修剪后的匹配與空格分割成塊。
或者,如果您想用一個正則表達式調用匹配所有出現:
if (preg_match_all('~(?:\G(?!\A)|(?=(?:\s[A-Z]{2})+$))\s\K[A-Z]{2}~', $s, $matches)) {
print_r($matches[0]);
}
在這里,正則表達式匹配:
(?:\G(?!\A)|(?=(?:\s[A-Z]{2})+$))
- 上一個匹配的結尾 (\G(?!\A)
) 或 (|
) 緊跟一個或多個空格序列的位置,然后是兩個大寫 ASCII 字母,直到字符串結尾\s
- 一個空格\K
- 匹配重置運算符[A-Z]{2}
- 兩個大寫的 ASCII 字母。
請參閱PHP 演示。
- 1 回答
- 0 關注
- 192 瀏覽
添加回答
舉報
0/150
提交
取消