Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式替换前两个任意字符后的数字_Php_Preg Replace - Fatal编程技术网

PHP正则表达式替换前两个任意字符后的数字

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您可

我需要帮助修复字符串,我需要在字符串的前两个任意字符后使用“preg_replace”删除字符串中的数字,示例如下:

  • N02[应移除2个]
  • AX1001[应删除1001]
  • AR2003[应删除2003]
  • AR[输出应为AR,因为没有数字]
  • 目前我正在使用: preg_替换('/\d/','',A0123”)

    但它从一开始就删除了数字。有人能帮忙吗

    更新:

    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]+~'