我想找到任何模式匹配:###-##-####
并将###-##,
替换为***-**
但保留-####
我在下面尝试了这个,但根本没有任何替换。
preg_replace('/(^[\d]{3})(-)([\d]{2})(-[\d]{4}$)/','\2\4',$myText);
感谢任何帮助
更新,这是我目前的完整代码字符串,在尝试了下面的一些建议之后。我将第二个回声输出与第一个相比较......并且社交数字都保持不变。
另外,正如下面提到的,我的字符串确实包含的不仅仅是一个社交...它长达数千个字符。我认为这是我真正的问题。对不起,如果我在开始时没有清除它。
//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 :(得分:0)
试试这个正则表达式:
(\d{3})(-)(\d{2})(-\d{4})
答案 1 :(得分:0)
试试这个:
preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$myText);
答案 2 :(得分:0)
答案 3 :(得分:0)
有一个可能的问题:您可能无法匹配正确的字符串(如果您尝试查找隐藏在大块文本中的SSN) - ^
和$
锚点只会匹配字符串的开头(或者有时是行的开头) - 如果这不是你想要的,但是你想要在长字符串中找到SSN,你需要摆脱那些锚点。
另一个问题可能是你似乎想用星号替换东西,但你的替换表达式中没有包含星号。你需要使用像
这样的替换表达式`***-**\4`