Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php preg_replace-替换部分社交网站_Php_Regex_Replace_Mask_Social - Fatal编程技术网

php preg_replace-替换部分社交网站

php preg_replace-替换部分社交网站,php,regex,replace,mask,social,Php,Regex,Replace,Mask,Social,我想找到任何模式匹配:- 并将-,替换为***-** 但是离开- 我在下面尝试了这个,但是没有任何东西被替换 preg_replace('/(^[\d]{3})(-)([\d]{2})(-[\d]{4}$)/','\2\4',$myText); 谢谢你的帮助 更新,这里是我的整个代码字符串,在尝试了下面的一些建议之后,它目前的状态。我正在比较第二个回波输出和第一个。。。社会数字都保持不变 另外,正如下面提到的,我的字符串包含的不仅仅是一个社交。。。它有数千个字符长。我认为这是我真正的问题。对不

我想找到任何模式匹配:-

并将-,替换为***-**

但是离开-

我在下面尝试了这个,但是没有任何东西被替换

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/>";
更新

我想标记所有的答案和答案,只是因为我没有澄清字符串中包含的不仅仅是社会意义。感谢您对这个问题的帮助,令人尴尬的是,它已经让我疯狂了好几天了。

试试这个正则表达式:

`***-**\4`
试试这个:

模式中有^和$,但我看不到m修饰符,所以 仅当-是整个字符串时匹配。 [\d]可以是 缩短为\d 如果需要,您的\2\4将离开-*- 您只需使用*\4即可
有一个可能的问题:如果您试图查找隐藏在一大块文本中的SSN,则可能没有匹配正确的字符串,^和$anchors将只匹配字符串的开头,有时也会匹配行的开头,如果这不是您想要的,而是您想要在长字符串中查找SSN,你需要摆脱那些锚

另一个潜在的问题是,您似乎想用星号替换对象,但在替换表达式中不包含星号。您需要使用替换表达式,如


我把它作为第二个参数,但它仍然没有改变字符串中的任何内容。塞恩·布莱特的建议也是如此。我将发布我的确切代码作为更新。你说的“任何模式匹配…”是指在一长串文本中吗?如果是这样,那么线锚的开始和结束将抛出任何匹配。此外,您没有用星号替换任何内容,这似乎是您的问题所暗示的,例如:将123-45-6789替换为***-***-6789就是这样。很多其他答案也提到了这一点,但我不知道用什么来代替^和$。简单地移除它们就解决了这个问题。谢谢\4代表什么?感谢在这种情况下,\4是表示第二个破折号和由正则表达式匹配的SSN的最后四位数字的文本\1, \2 ... \9是回调引用。它引用并表示匹配的正则表达式的某些部分。从技术上讲,它取决于具体的反向引用所包含的内容的实现,例如\4;但是,最常见的情况是匹配表达式中第四组括号的内容。
preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$myText);
`***-**\4`