php preg_match - 搜索特定的 number/character 代码
php preg_match - search for specific number/character code
我正在尝试在字符串中搜索 number/character 模式。
字符串可以像这样
"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 可以是减号或 space 字母。
示例:
"AA 2019"
"ZZ-2018"
我发现我可以用 /[0-9]{6}/
得到 6 个数字。
年份 /[0-9]{4}
。我想补充一点,它只能在 2000 and 2100
之间
我可以通过以下方式得到两个减号之间的数字:/(?<=\-)(.*?)(?=\-)/
或
/\-(.*?)\-/
例如,我有想法寻找两个“-”字符之间的数字并将其存储在一个变量中。
然后说我想要这个变量之后的数字,长度为 6 个字符,介于 000000 和 999999 之间。
与当年类似的游戏。我想说我会得到带有“--”的变量之前的数字。最大长度为 4 个数字,介于 2000 和 2100 之间。
如果我将年份存储在一个变量中,理论上我可以说我正在寻找“-$yearvariable”或“[space]$yearvariable
之前的两个字母
您可以使用
\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 或更多)。
参见 regex graph:
$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
)
我正在尝试在字符串中搜索 number/character 模式。
字符串可以像这样
"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 可以是减号或 space 字母。
示例:
"AA 2019"
"ZZ-2018"
我发现我可以用 /[0-9]{6}/
得到 6 个数字。
年份 /[0-9]{4}
。我想补充一点,它只能在 2000 and 2100
我可以通过以下方式得到两个减号之间的数字:/(?<=\-)(.*?)(?=\-)/
或
/\-(.*?)\-/
例如,我有想法寻找两个“-”字符之间的数字并将其存储在一个变量中。 然后说我想要这个变量之后的数字,长度为 6 个字符,介于 000000 和 999999 之间。
与当年类似的游戏。我想说我会得到带有“--”的变量之前的数字。最大长度为 4 个数字,介于 2000 和 2100 之间。
如果我将年份存储在一个变量中,理论上我可以说我正在寻找“-$yearvariable”或“[space]$yearvariable
之前的两个字母您可以使用
\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 或更多)。
参见 regex graph:
$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
)