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

php preg_match - 搜索特定的数字/字符代码

php preg_match - 搜索特定的数字/字符代码

PHP
呼如林 2021-09-18 17:08:01
我正在尝试在字符串中搜索数字/字符模式。字符串看起来像这样"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 位或更多)。

请参阅正则表达式图

//img1.sycdn.imooc.com//6145ac930001219506110195.jpg

//img1.sycdn.imooc.com//6145ac9b0001b54b05650191.jpg

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

)


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

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