2012-04-24 8 views
0

私は尋ねるのが嫌ですが、私はphp preg_replaceを見つけられず、特定のビットを無視します。php preg_replace frustration

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

どれでも役立つだろう:

$string = '2012042410000102'; 

$文字列は_0424_102

示す番号は、常に私が試したものを変更し、2012年の変化これまで年

可変であるように見える必要があります感謝する。私はそれがノブの質問だと思っていますが、誰でも助けてくれる点は簡単です。

おかげ

+1

基本的に、あなたは最初の4桁の数字とアンダースコア「10000」を置換するように、あなたがしたい部分を取得するためのサブストリングを使用することができますか? – Wiseguy

+0

'[^ \ d]'と書くと、小数点以下をマッチさせることになります。 – mario

+0

@Wiseguy yup that'sすべて – knittledan

答えて

1

すると、次を試してみてください。

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

これは、最初の4桁のいずれかと一致します文字列、または文字列の最後の前に '10000'の後に3桁の数字がある場合は文字列 '10000'を返します。

あなたはこのようにそれを使用します。彼らは正規表現が不要に思える同じ文字場所でいつもなら

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

http://codepad.org/itTgEGo4

+0

どのように2つの区切り文字を使用しますか?最初の部分2012の空白と100000の_ – knittledan

+0

@knittledan - そのためには、文字列全体と一致するKolinkのソリューションのようなものを使用し、取り除きたくない部分を保持するためにキャプチャグループを使用する必要があるでしょう。 –

3
あなたの最初の正規表現が探している

  • 四桁(年)
  • 数字ではない任意の1文字の文字列の始まりをも{または}
  • 数字10000
  • 桁も{または}

あなたの第二の正規表現が探している文字列の終わりではない任意の1文字:

  • 文字列の先頭を
  • 4桁(年)
  • 任意の4文字数字ではありませんTERS
  • 数万
  • 数字ではありません任意の3つの文字
  • 文字列

の終わり、あなたが探している正規表現は次のようになります。

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

また、置換は次のとおりです。

_$1_$2 

この正規表現は、探し:

  • 四桁(年)
  • は、4桁の数字(月と日)
  • 番号10000をキャプチャし、文字列の開始を
  • 3桁の数字をキャプチャします(例では102)。
  • 文字列
+0

説明ありがとうございました – knittledan

0

の終わりには、単純な文字列関数を使用します。

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

http://codepad.org/elRSlCIP

0

。あなたは

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

または

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