PHP正则表达式替换前两个任意字符后的数字
我需要帮助修复字符串,我需要在字符串的前两个任意字符后使用“preg_replace”删除字符串中的数字,示例如下:PHP正则表达式替换前两个任意字符后的数字,php,preg-replace,Php,Preg Replace,我需要帮助修复字符串,我需要在字符串的前两个任意字符后使用“preg_replace”删除字符串中的数字,示例如下: N02[应移除2个] AX1001[应删除1001] AR2003[应删除2003] AR[输出应为AR,因为没有数字] 目前我正在使用: preg_替换('/\d/','',A0123”) 但它从一开始就删除了数字。有人能帮忙吗 更新: AXZ1001:在这种情况下,它应该是产品AXZ AX1001:在这种情况下,它应该是AX产品 A1001:在这种情况下,它应该是产品A1您可
AXZ1001:在这种情况下,它应该是产品AXZ
AX1001:在这种情况下,它应该是AX产品
A1001:在这种情况下,它应该是产品A1您可以使用
\K
功能:
$str = preg_replace('~\A.{2,}?\K[0-9]+~', '', $str);
其中\K
删除匹配结果左侧的所有内容
由于{2,}?
是一个惰性量词,因此在找到一个数字之前,将匹配最少的字符(但至少2个)。它可以被贪婪的版本替换为:。[^0-9]*
如果要处理此类字符串:ABC123XYZ999
获取ABCXYZ
:
$str = preg_replace('~(?:\A..|(?!\A)\G)[^0-9]*\K[0-9]+~', '', $str);
\G
是最后一次匹配结束时的锚。那么ABC123XYZ999
应该是ABCXYZ
还是ABCXYZ999
?如果您只想保留字符串的前两个字符,为什么不使用substr()
?如果这不是您想要做的,那么如果字符串在前两个字符后同时包含数字和其他字符,您希望发生什么?我不想使用substr,因为我需要删除前两个字符后的数字,但是如果前两个字符后没有数字,我不想删除它。preg_replace(“~\a..\K[0-9]+~”,“,“AX1001”);这是可行的,但它告诉我们忽略前两个字符的位置?好的,我将调整前两个模式来处理这种情况。AXZ1001:在这种情况下,它应该是产品AXZ AX1001:在这种情况下,它应该是产品AX A1001:在这种情况下,它应该是产品A1。它起作用了,您能解释一下表达式中发生了什么吗?”~\A.{2,}?\K[0-9]+~'