gpt4 book ai didi

php - 字符串中的正则表达式匹配部分

转载 作者:可可西里 更新时间:2023-10-31 23:39:07 27 4
gpt4 key购买 nike

我有一个字符串 foo-foo-AB1234-foo-AB12345678。字符串可以是任何格式,有没有办法只匹配以下模式 letter,letter,digits 3-5

我有以下实现:

preg_match_all('/[A-Za-z]{2}[0-9]{3,6}/', $string, $matches);

不幸的是,这在 AB1234AB12345678 上找到了一个匹配项,它有超过 6 个数字。在这种情况下,我只希望在 AB1234 上找到匹配项。

我试过:

preg_match_all('/^[A-Za-z]{2}[0-9]{3,6}$/', $string, $matches);

您会注意到 ^$ 标记开始和结束,但这只适用于字符串,而不适用于部分,因此找不到匹配项。

我理解为什么代码会像现在这样运行。这是合乎逻辑的。虽然我想不出解决方案。

最佳答案

你一定是在寻找单词边界\b:

\b\p{L}{2}\p{N}{3,5}\b

参见 demo

请注意,\p{L} 匹配一个 Unicode 字母,而 \p{N} 匹配一个 Unicode 数字。

您也可以使用修改后的正则表达式 \b[a-zA-Z]{2}[0-9]{3,5}\b。请注意,使用 anchor 会使您的正则表达式仅匹配字符串的开头(使用 ^)或/和字符串的结尾(使用 $)。

如果您有带下划线的单词(如 foo-foo_AB1234_foo_AB12345678_string),您将需要一个 slight modification :

(?<=\b|_)\p{L}{2}\p{N}{3,5}(?=\b|_)

关于php - 字符串中的正则表达式匹配部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31783259/

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