我有以下資料:
$pattern = "/^([\w_]{1})(.+)([\w_]{1}@)/u";
$replacement = "$1*$3***$4";
$email = "testa@weste.de";
echo "obfuscated: ".preg_replace($pattern, $replacement, $email).RT;
結(jié)果是:t*a@***weste.de
但是我想問(wèn):t*@w***.de
如何在@之后而不是之前抓取字母。它是如何與.de部分一起工作的?
對(duì)于示例數(shù)據(jù)中的替換,您可以使用與
\K
的匹配來(lái)忘記第一個(gè)字符后面匹配的內(nèi)容并保留它。要保留@符號(hào)后的第一個(gè)字符,可以使用捕獲組并在替換中使用該組。
^
字符串的開(kāi)頭\w
匹配單個(gè)單詞字符(也將匹配_
)\K
忘了目前匹配的是什么[^\s@]+
匹配除@
或空白字符以外的1+字符@
匹配@char(\w)
捕獲組1,匹配單詞char(保留)[^\s.@]+
匹配除@
以外的1+字符,即空格字符或點(diǎn)正則表達(dá)式演示| Php演示
在替換中,使用單個(gè)捕獲組
*@$1***
Output
您可以根據(jù)自己的喜好制作特定的圖案。例如,如果字符串末尾應(yīng)該有一個(gè)點(diǎn)后跟至少2個(gè)字符a-z,并且不希望在該點(diǎn)之后的第一個(gè)點(diǎn)停止匹配@
Regex demo