为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配 next 是空格或字符串结尾

正则表达式匹配 next 是空格或字符串结尾

PHP
HUWWW 2022-10-14 10:06:05
我的 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 演示


查看完整回答
反对 回复 2022-10-14
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信