php preg_

php preg_,php,regex,preg-replace,Php,Regex,Preg Replace,我不愿意问,但我无法理解php preg_替换和忽略某些刺痛 $string = '2012042410000102'; $string需要看起来像_0424_102 显示的数字总是变化的,2012年每年都在变化 我所尝试的: ^\d{4}[^\d{4}]10000[^\d{3}]$ ^\d{4}[^\d]{4}10000[^\d]{3}$ 任何帮助都将不胜感激。我知道这是一个很难回答的问题,但对任何帮助我的人来说都很容易 谢谢您的第一个正则表达式正在寻找: 字符串的开头 四位数(年份)

我不愿意问,但我无法理解php preg_替换和忽略某些刺痛

$string = '2012042410000102';
$string需要看起来像_0424_102

显示的数字总是变化的,2012年每年都在变化

我所尝试的:

^\d{4}[^\d{4}]10000[^\d{3}]$
^\d{4}[^\d]{4}10000[^\d]{3}$
任何帮助都将不胜感激。我知道这是一个很难回答的问题,但对任何帮助我的人来说都很容易


谢谢

您的第一个正则表达式正在寻找:

  • 字符串的开头
  • 四位数(年份)
  • 不是数字或{或}的任何单个字符
  • 数字是10000
  • 不是数字或{或}的任何单个字符
  • 弦外之音
您的第二个正则表达式正在寻找:

  • 字符串的开头
  • 四位数(年份)
  • 非数字的任意四个字符
  • 数字是10000
  • 非数字的任意三个字符
  • 弦外之音
您要查找的正则表达式是:

^\d{4}(\d{4})10000(\d{3})$
替代品应为:

_$1_$2
此正则表达式查找:

  • 字符串的开头
  • 四位数(年份)
  • 捕获四位数字(月和日)
  • 数字是10000
  • 捕获三位数字(示例末尾的
    102
  • 弦外之音

    • 您的第一个正则表达式正在寻找:

      • 字符串的开头
      • 四位数(年份)
      • 不是数字或{或}的任何单个字符
      • 数字是10000
      • 不是数字或{或}的任何单个字符
      • 弦外之音
      您的第二个正则表达式正在寻找:

      • 字符串的开头
      • 四位数(年份)
      • 非数字的任意四个字符
      • 数字是10000
      • 非数字的任意三个字符
      • 弦外之音
      您要查找的正则表达式是:

      ^\d{4}(\d{4})10000(\d{3})$
      
      替代品应为:

      _$1_$2
      
      此正则表达式查找:

      • 字符串的开头
      • 四位数(年份)
      • 捕获四位数字(月和日)
      • 数字是10000
      • 捕获三位数字(示例末尾的
        102
      • 弦外之音

      只需使用简单的字符串函数:

      $string = '2012042410000102';
      $new = '_'.str_replace('10000', '_', substr($string, 4));
      

      只需使用简单的字符串函数:

      $string = '2012042410000102';
      $new = '_'.str_replace('10000', '_', substr($string, 4));
      

      尝试以下操作:

      ^\d{4}|10000(?=\d{3}$)
      
      这将匹配字符串中的前四位数字,如果字符串末尾前的“10000”后面有三位数字,则匹配字符串“10000”

      您可以这样使用它:

      preg_replace('/^\d{4}|10000(?=\d{3}$)/', '_', $string);
      

      尝试以下操作:

      ^\d{4}|10000(?=\d{3}$)
      
      这将匹配字符串中的前四位数字,如果字符串末尾前的“10000”后面有三位数字,则匹配字符串“10000”

      您可以这样使用它:

      preg_replace('/^\d{4}|10000(?=\d{3}$)/', '_', $string);
      

      如果它们始终位于相同的字符位置,则正则表达式似乎不必要。您可以使用子字符串来获取所需的部件,如

      sprintf('_%s_%s', substr($string,4,4), substr($string,13))
      


      如果它们总是位于相同的字符位置,则正则表达式似乎不必要。您可以使用子字符串来获取所需的部件,如

      sprintf('_%s_%s', substr($string,4,4), substr($string,13))
      


      基本上,你想用下划线替换前四位数字和“10000”?如果你写
      [^\d]
      这意味着匹配非小数。基本上,你想用下划线替换前四位数字和“10000”?如果你写
      [^\d]
      这意味着匹配非小数。你怎么做两个分隔符?2012年第一部分为空白,100000?@knittledan为uu。为此,您可能需要使用类似Kolink的解决方案,匹配整个字符串,并使用捕获组保留不希望删除的部分。如何使用两个分隔符?2012年第一部分为空白,100000?@knittledan为uu。为此,您可能需要使用类似Kolink的解决方案,匹配整个字符串,并使用捕获组保留不希望删除的部分。