我正在尝试在字符串中搜索数字/字符模式。字符串看起来像这样"any text CA-2019-6-000000 any text" "any text KA 2019-2-929029" // note: no "-" between the "KA and 2019" "KA-2019-11-929029" 我可以肯定地说,总有一年,比如2000/2019/2055。年份后面总是一个减号,从 1-12 两个可能的数字和另一个减号。哪个是月份。在“ -<num>-”之后,是一个 6 位长的数字,可以是至少000000或最大999999在一年之前,可以是最大的。两个字符的长字符串后跟一个减号。在这两个字符 long strong 之间可以是减号或空格字母。例子:"AA 2019""ZZ-2018"我发现我可以得到 6 个数字/[0-9]{6}/。年由/[0-9]{4}。我想补充一点,它只能介于2000 and 2100我可以得到两个减号之间的数字:/(?<=\-)(.*?)(?=\-)/或/\-(.*?)\-/例如,我的想法是查找两个“-”字符之间的数字并将其存储在一个变量中。然后说我想要在这个变量之后的数字之间有 6 个字符长和 000000 和 999999 之间的数字。与当年类似的游戏。我想说我会得到带有“--”的变量之前的数字,最大长度为 4 个数字,介于 2000 和 2100 之间。如果我将年份存储在一个变量中,理论上我可以说我正在寻找两个位于“-$yearvariable”或“[space]$yearvariable”之前的字母
1 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
您可以使用
\b([A-Z]{2})[-\s](20[0-9]{2}|2100)-(0?[1-9]|1[0-2])-(\d{6})(?!\d)
查看正则表达式演示
细节
\b
- 字边界([A-Z]{2})
- 两个大写字母[-\s]
- 连字符或空格(20[0-9]{2}|2100)
- 从 2000 到 2100 的数字-
- 一个连字符(0?[1-9]|1[0-2])
- 从 1 到 12 的一个月-
- 一个连字符(\d{6})(?!\d)
- 6 位数字(不是 7 位或更多)。
请参阅正则表达式图:
PHP 演示:
$s = "any text CA-2019-6-000000 any text";
if (preg_match('~\b([A-Z]{2})[-\s](20[0-9]{2}|2100)-(0?[1-9]|1[0-2])-(\d{6})(?!\d)~', $s, $m)) {
print_r($m);
}
输出:
Array
(
[0] => CA-2019-6-000000
[1] => CA
[2] => 2019
[3] => 6
[4] => 000000
)
- 1 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消