PHP 正则表达式匹配字符串中所有单个字母后跟数值
PHP regex to match all single letters followed by numeric value in string
我正在尝试获取以下类型字符串的正则表达式 运行:一个大写字母后跟一个数值。该字符串可以由多个这些字母数字值组合组成。这里有一些例子和我的预期输出:
A12B8Y9CC10
-> output [0 => 12, 1 => 8, 2 => 9] (10 is ignored, because there are two letters)
V5C8I17
-> output [0 => 5, 1 => 8, 2 => 17]
KK18II9
-> output [] (because KK and II are always two letters followed by numeric values)
I8VV22ZZ4S9U2
-> output [0 => 8, 1 => 9, 2 => 2] (VV and ZZ are ignored)
A18Z12I
-> output [0 => 18, 1 => 12] (I is ignored, because no numeric value follows)
我尝试使用 preg_match 通过以下正则表达式达到此目的:
/^([A-Z]{1}\d{1,)$/
但它没有给出预期的输出。你能帮我解决这个问题吗?
谢谢并致以最诚挚的问候!
您可以在 php
中使用此正则表达式使用 preg_match_all
:
preg_match_all('/(?<![a-zA-Z])[a-zA-Z]\K\d+/', $string, $matches);
结果数组 $matches[0]
到 return 所有匹配项。
正则表达式详细信息:
(?<![a-zA-Z])
: 确保我们在当前位置之前没有字母
[a-zA-Z]
:匹配一个字母
\K
: 重置匹配信息
\d+
:匹配1+位数字
另一种变体可能是使用 SKIP FAIL 跳过不合格的匹配项。
[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z](\d+)
说明
[A-Z]{2,}\d+
匹配 2 个或更多大写字符 A-Z 和 1+ 个数字
(*SKIP)(*FAIL)
使用 SKIP FAIL 避免匹配
|
或
[A-Z](\d+)
匹配单个字符 A-Z 并在 组 1 中捕获一个或多个数字
匹配是第一个捕获组。
$pattern = '/[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z](\d+)/';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);
或者使用 \K
,如 anubhava 的回答
[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z]\K\d+
我正在尝试获取以下类型字符串的正则表达式 运行:一个大写字母后跟一个数值。该字符串可以由多个这些字母数字值组合组成。这里有一些例子和我的预期输出:
A12B8Y9CC10
-> output [0 => 12, 1 => 8, 2 => 9] (10 is ignored, because there are two letters)
V5C8I17
-> output [0 => 5, 1 => 8, 2 => 17]
KK18II9
-> output [] (because KK and II are always two letters followed by numeric values)
I8VV22ZZ4S9U2
-> output [0 => 8, 1 => 9, 2 => 2] (VV and ZZ are ignored)
A18Z12I
-> output [0 => 18, 1 => 12] (I is ignored, because no numeric value follows)
我尝试使用 preg_match 通过以下正则表达式达到此目的: /^([A-Z]{1}\d{1,)$/
但它没有给出预期的输出。你能帮我解决这个问题吗?
谢谢并致以最诚挚的问候!
您可以在 php
中使用此正则表达式使用 preg_match_all
:
preg_match_all('/(?<![a-zA-Z])[a-zA-Z]\K\d+/', $string, $matches);
结果数组 $matches[0]
到 return 所有匹配项。
正则表达式详细信息:
(?<![a-zA-Z])
: 确保我们在当前位置之前没有字母[a-zA-Z]
:匹配一个字母\K
: 重置匹配信息\d+
:匹配1+位数字
另一种变体可能是使用 SKIP FAIL 跳过不合格的匹配项。
[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z](\d+)
说明
[A-Z]{2,}\d+
匹配 2 个或更多大写字符 A-Z 和 1+ 个数字(*SKIP)(*FAIL)
使用 SKIP FAIL 避免匹配|
或[A-Z](\d+)
匹配单个字符 A-Z 并在 组 1 中捕获一个或多个数字
匹配是第一个捕获组。
$pattern = '/[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z](\d+)/';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);
或者使用 \K
,如 anubhava 的回答
[A-Z]{2,}\d+(*SKIP)(*FAIL)|[A-Z]\K\d+