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

あなたの最初の正規表現は以下を探しています:

  • 文字列の先頭
  • 4桁(年)
  • 数字でも{または}でもない単一の文字
  • 数10000
  • 数字でも{または}でもない単一の文字
  • 文字列の終わり

2番目の正規表現は次のものを探しています。

  • 文字列の先頭
  • 4桁(年)
  • 数字以外の4文字
  • 数10000
  • 数字以外の3文字
  • 文字列の終わり

探している正規表現は次のとおりです。

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

そして、交換は次のようになります。

_$1_$2

この正規表現は以下を探します:

  • 文字列の先頭
  • 4桁(年)
  • 4桁(月と日)をキャプチャします
  • 数10000
  • 3桁をキャプチャ102します(例の最後にあります)
  • 文字列の終わり
于 2012-04-24T20:20:24.170 に答える
1

次のことを試してください。

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

これは、文字列の最初の4桁、または文字列の終わりの前の「10000」の後の3桁がある場合は文字列「10000」のいずれかに一致します。

次のように使用します。

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

http://codepad.org/itTgEGo4

于 2012-04-24T20:23:19.943 に答える
0

それらが常に同じ文字位置にある場合、正規表現は不要のように見えます。部分文字列を使用して、次のような必要な部分を取得できます。

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

また

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

単純な文字列関数を使用するだけです。

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

http://codepad.org/elRSlCIP

于 2012-04-24T20:21:39.937 に答える