gpt4 book ai didi

php - 考虑下一个字符的正则表达式

转载 作者:行者123 更新时间:2023-12-02 05:03:07 26 4
gpt4 key购买 nike

我正在尝试匹配我们的订单号(始终采用 ABC + 6 或 7 位数字的格式)。例如 ABC123456 或 ABC1234567

我有:

preg_match_all("/(ABC)([0-9]{6}|[0-9]{7})/", $content, $matches);

但是如果有人向我们引用 ABC12345678 那么它正在提取 ABC1234567。这是不正确的。相反,preg_match_all 应该找不到匹配项。

我如何修改正则表达式以说“所有出现的 ABC 后跟 6 或 7 位数字。忽略第 7 个字符之后的字符是数字的任何内容”

最佳答案

你需要一个 negative lookahead :

preg_match_all("/(ABC)([0-9]{6}|[0-9]{7})(?![0-9])/", $content, $matches);

这将匹配 ABC1234567,除了数字之外的 7 之后的任何内容。

(?![0-9]) 之前的部分只有当 (?!...) 中的部分不匹配时才会匹配。因此,如果您不想在 7 之后添加字母,请执行以下操作:

preg_match_all("/(ABC)([0-9]{6}|[0-9]{7})(?![0-9a-zA-Z])/", $content, $matches);

如果您也不想要 _ 字符,请执行以下操作:

preg_match_all("/(ABC)([0-9]{6}|[0-9]{7})(?![0-9a-zA-Z_])/", $content, $matches);

这实际上等同于使用 \b:

preg_match_all("/(ABC)([0-9]{6}|[0-9]{7})\b/", $content, $matches);

关于php - 考虑下一个字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com