亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式匹配 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 關注
  • 192 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號