猿问

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

我的 regfu 已被拒绝...而且我无法获得预期的匹配。

以下是需要匹配和不需要匹配的示例:

  • NLNL LL

  • LNLN LL LL

  • NNLL LL LL

  • LNLN LLL LL

  • LLNN LL LLL <-- 跳过因为:

只需要:

  • 1 到 3 对由一个空格分隔的字母

  • 哪些是连续到字符串结尾的

\s{1}([A-Z]{2})很接近,但也抓住了上面skip的一部分。

为什么?我需要从字符串中获取姓名首字母。字符串中附加了 1、2 或 3 人的姓名首字母。我将用 PHP 抓取那些来存储它们。


HUWWW
浏览 214回答 1
1回答

缥缈止盈

您可以使用if (preg_match('~(?: [A-Z]{2})+$~', $s, $match)) {&nbsp; &nbsp; 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)) {&nbsp; &nbsp; print_r($matches[0]);}在这里,正则表达式匹配:(?:\G(?!\A)|(?=(?:\s[A-Z]{2})+$))- 上一个匹配的结尾 (&nbsp;\G(?!\A)) 或 (&nbsp;|) 紧跟一个或多个空格序列的位置,然后是两个大写 ASCII 字母,直到字符串结尾\s- 一个空格\K- 匹配重置运算符[A-Z]{2}- 两个大写的 ASCII 字母。请参阅PHP 演示。
随时随地看视频慕课网APP
我要回答