我的 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 关注
- 163 浏览
添加回答
举报
0/150
提交
取消