2011-10-17 13 views
0

の一部を置き換える:###-##-####のphpにpreg_replace - 私は任意のパターンマッチングを見つけたい、社会

をして***-**

###-##,を置き換えるが、-####

を残して、私は以下のこのを試してみましたが、何もされていません全く置き換えられました。

preg_replace('/(^[\d]{3})(-)([\d]{2})(-[\d]{4}$)/','\2\4',$myText); 

すべてのヘルプは、それが現在、以下の提案のいくつかを試した後、立っているとして、ここで私の全体のコード列で、


更新を高く評価しています。私は2番目のエコー出力を最初のものと比較しています...そして社会的な数字はすべて同じままです。

また、以下で述べるように、私の弦には単なる社会的なもの以上のものが含まれています...それは何千もの文字です。私の本当の問題だと思います。申し訳ありませんが、私は最初にそれを明確にしませんでした。

//Make the CSC credit report request. 
    $strCscResponse = $Csc->makeRequest($strFixedFormatRecord); 

    echo "<br/><br/><pre>" . $strCscResponse . "</pre><br/><br/>"; 

    $strCscResponse = str_replace("!", " ", $strCscResponse); 

    $strCscResponse = preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$strCscResponse); 

    echo "<br/><br/><pre>" . $strCscResponse . "</pre><br/><br/>"; 

更新

私は、私は、文字列がその中にちょうど社会的以上のものを持っていませんでし明らかにするという理由だけで、すべての答えと「答え」をマークしたいと思います。この問題の助けをありがとう、恥ずかしがり屋として、私は数日間私を荒らしてきました。

+0

あなたは長いパターンの文字列を意味するのですか?もしそうなら、ラインアンカーの始めと終わりはどんなマッチをも捨てるでしょう。また、あなたはアスタリスクで何も置き換えていません。これはあなたの質問が示唆しているようなものです(例:: '123-45-6789'を' *** - ** - 6789'に置き換えてください) –

答えて

0

一つの可能​​な問題があります:(あなたがテキストの大きなブロックに埋もれのSSNを見つけようとしている場合)あなたが右の文字列に一致していない可能性があります - だけで文字列の先頭(または時々始まると一致します^$アンカーあなたが望むものではなく、長い文字列でSSNを探したい場合は、それらのアンカーを取り除く必要があります。

他の問題は、あなたがアスタリスクで物を置き換えたいと思われるかもしれないが、あなたの置換式にアスタリスクを入れないことです。

`***-**\4` 
+0

それでした。他の多くの答えはこれにも言及していましたが、^と$の代わりに何を置くべきかわかりませんでした。単にそれらを削除するだけで問題は解決しました。ありがとう! – adam

+0

\ 4は何を表しますか?ありがとう – zehelvion

+0

この場合、 '\ 4 'は、正規表現にマッチしたSSNの2番目のダッシュと最後の4桁を表すテキストです。 '\ 1'、' \ 2'、 '\ 9'は「バックリファレンス」と呼ばれます。これは、マッチした正規表現の一部を参照し、表現します。 _TECHNICALLY、それは '\ 4'のような特定のバックリファレンスに含まれているものを正確に実装するかどうかによって決まります;しかし、たいていの場合、それは第4番目の()の括弧'() 'の内容ですマッチ式 –

0

この正規表現を試してみてください:

(\d{3})(-)(\d{2})(-\d{4}) 
+0

私は2番目のパラメータを入れましたが、それでも私の文字列の何も変更していません。 Sein Brightsの提案と同じこと。正確なコードをアップデートとして投稿します。 – adam

0

この試してみてください:あなたは^持っているとあなたのパターンで$が、私は何m修飾子を見ない、もしそうなら、この にのみマッチします

preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$myText); 
0
  1. を### - ## - ####は文字列全体です。
  2. [\ dの] は、あなたの\ 2 \ 4去るDに
  3. を\に短縮することができます - あなたが望んだ場合、#### * - #### あなたは単に持つことができます* \ 4
関連する問題