猿问

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

我正在尝试在字符串中搜索数字/字符模式。


字符串看起来像这样


"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”之前的字母


呼如林
浏览 206回答 1
1回答

汪汪一只猫

您可以使用\b([A-Z]{2})[-\s](20[0-9]{2}|2100)-(0?[1-9]|1[0-2])-(\d{6})(?!\d)查看正则表达式演示细节\b&nbsp;- 字边界([A-Z]{2})&nbsp;- 两个大写字母[-\s]&nbsp;- 连字符或空格(20[0-9]{2}|2100)&nbsp;- 从 2000 到 2100 的数字-&nbsp;- 一个连字符(0?[1-9]|1[0-2])&nbsp;- 从 1 到 12 的一个月-&nbsp;- 一个连字符(\d{6})(?!\d)&nbsp;- 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)) {&nbsp;&nbsp; &nbsp; print_r($m);}输出:Array(&nbsp; &nbsp; [0] => CA-2019-6-000000&nbsp; &nbsp; [1] => CA&nbsp; &nbsp; [2] => 2019&nbsp; &nbsp; [3] => 6&nbsp; &nbsp; [4] => 000000)
随时随地看视频慕课网APP
我要回答