php preg_replace沮丧

时间:2012-04-24 20:15:30

标签: php regex preg-replace

我不愿意问,但我无法弄清楚php preg_replace并忽略了刺痛的某些部分。

$string = '2012042410000102';

$ string需要看起来像_0424_102

显示的数字总是在变化,2012年会有所变化

我尝试了什么:

^\d{4}[^\d{4}]10000[^\d{3}]$
^\d{4}[^\d]{4}10000[^\d]{3}$

任何帮助将不胜感激。我知道这是一个noob问题,但对于任何有帮助的人来说都很容易。

由于

4 个答案:

答案 0 :(得分:3)

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

  • 字符串的开头
  • 四位数(年份)
  • 任何不是数字的单个字符,也不是{或}
  • 数字10000
  • 任何不是数字的单个字符,也不是{或}
  • 字符串的结尾

你的第二个正则表达式正在寻找:

  • 字符串的开头
  • 四位数(年份)
  • 任何不是数字的四个字符
  • 数字10000
  • 任何三位不是数字的字符
  • 字符串的结尾

你正在寻找的正则表达式是:

^\d{4}(\d{4})10000(\d{3})$

替换应该是:

_$1_$2

这个正则表达式寻找:

  • 字符串的开头
  • 四位数(年份)
  • 捕获四位数(月和日)
  • 数字10000
  • 捕获三位数字(示例中最后为102
  • 字符串的结尾

答案 1 :(得分:1)

尝试以下方法:

^\d{4}|10000(?=\d{3}$)

这将匹配字符串中的前四位数字,或者如果在字符串结尾之前的“10000”之后有三位数字,则匹配字符串“10000”。

您可以这样使用它:

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

http://codepad.org/itTgEGo4

答案 2 :(得分:0)

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

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

http://codepad.org/elRSlCIP

答案 3 :(得分:0)

如果他们总是在相同的角色位置,那么正则表达式似乎是不必要的。您可以使用子字符串来获取所需的部分,例如

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

'_' . substr($string,4,4) . '_' . substr($string,13)