php preg_replace - заменить часть соц. - PullRequest
0 голосов
/ 17 октября 2011

Я хочу найти любой соответствующий шаблон: ###-##-####

и заменить ###-##, на ***-**

, но оставить -####

Я пыталсяэто ниже, но ничего не заменяется вообще.

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

Любая помощь приветствуется


Обновление, вот моя строка кода в том виде, в каком она есть в настоящее время, после попытки несколькихиз предложений ниже.Я сравниваю второй вывод эха с первым ... и все социальные номера остаются неизменными.

Кроме того, как было упомянуто ниже, моя строка содержит больше, чем просто социальный ... этотысячи символов в длину.что я думаю, это моя настоящая проблема.Извините, если я не прояснил это в начале.

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

    echo "<br/><br/><pre>" . $strCscResponse  . "
"; $ strCscResponse = str_replace ("! "," ", $ strCscResponse); $ strCscResponse = preg_replace ('/ ^ \ d {3} - \ d {2} (- \ d {4}) $ /', '*** - ** $ 1 ', $ strCscResponse); echo "
" . $strCscResponse  . "
";

update

Я хотел бы отметить все ответы и" ответ "только потому, что я не уточнил строку, имеет большечем просто общение в нем. спасибо за помощь в решении этой проблемы, достаточно смущающе, что она сводит меня с ума уже пару дней.

Ответы [ 4 ]

0 голосов
/ 17 октября 2011

Существует одна возможная проблема: возможно, вы не соответствуете правильной строке (если вы пытаетесь найти SSN, скрытые в большом блоке текста) - якоря ^ и $ будут соответствовать только началу строки ( или иногда начало строки) - если это не то, что вам нужно, а вместо этого вы хотите найти номера SSN в длинной строке, вам нужно избавиться от этих якорей.

Другая проблема, возможно, заключается в том, что вы, кажется, хотите заменить вещи звездочками, но вы не включаете звездочки в выражение замены. вам нужно использовать выражение замены как

`***-**\4`
0 голосов
/ 17 октября 2011

Попробуйте это:

preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$myText);
0 голосов
/ 17 октября 2011
  1. у вас есть ^ и $ в вашем шаблоне, но я не вижу модификатора m, так что это будет соответствовать, только если ### - ## - #### - вся строка.
  2. [\ d] может быть сокращено до \ d
  3. ваш \ 2 \ 4 уйдет - ####, если хотите * - #### Вы можете просто иметь * \ 4
0 голосов
/ 17 октября 2011

Попробуйте это регулярное выражение:

(\d{3})(-)(\d{2})(-\d{4})
...