0

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

$string = '2012042410000102';

$string 需要看起来像 _0424_102

显示数字不断变化,2012 年每年都在变化

我试过的:

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

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

谢谢

4

4 回答 4

3

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

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

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

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

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

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

替换应该是:

_$1_$2

此正则表达式查找:

  • 字符串的开始
  • 四位数(年份)
  • 捕获四位数字(月份和日期)
  • 数字 10000
  • 捕获三位数字(102示例中的末尾)
  • 字符串的结尾
于 2012-04-24T20:20:24.170 回答
1

尝试以下操作:

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

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

你会像这样使用它:

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

http://codepad.org/itTgEGo4

于 2012-04-24T20:23:19.943 回答
0

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

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

http://codepad.org/elRSlCIP

于 2012-04-24T20:21:39.937 回答
0

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

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

或者

'_' . substr($string,4,4) . '_' . substr($string,13)
于 2012-04-24T20:28:54.960 回答