正则表达式替换除前3之外的所有字符

kd3sttzy  于 2022-09-18  发布在  PHP
关注(0)|答案(1)|浏览(120)

我需要通过正则表达式替换给定格式的以下字符串。任何帮助都将不胜感激。

1.johnsmith@gmail.com=>johxxxxx@xxxx.xxx(除前三个字符@和点(.)外,所有字符都应替换为x)。
1.John Smith=>Johx SMixx(除每个字母的前三个字符外,所有字符都应替换为x)
1.9876543210=>987xxx3210(除前三和后四个字符外,所有字符都应替换为x)

先谢谢你。

ig9co6j1

ig9co6j11#

php > echo preg_replace('/(?<=...)[^@.]/', 'x', 'johnsmith@gmail.com');
johxxxxxx@xxxxx.xxx

https://regex101.com/r/ASq1N2/1

php > echo preg_replace('/(?<=S{3})S/', 'x', 'John Smith');
Johx Smixx

https://regex101.com/r/zqhwSg/1

php > echo preg_replace('/(?<=.{3}).(?=.{4})/', 'x', '9876543210');
987xxx3210

https://regex101.com/r/ppmBUm/1

公元1年。
方法:
A)我想替换所有不是@.的单个字符
B)我要确保要替换的字符至少是字符串中的第4个字符。
这意味着它必须至少还有3个字符

A)为了匹配字符,我使用了[]“Character Class”运算符。
在它中,我可以指定要匹配的字符。或者,如果我以^开头,则不匹配的字符。这就是[^@.]将匹配而不是@.之一的单个字符的原因。
(注:^[]之外有不同的含义)。

B)我们可以使用“向后看”(?=)表达式向左看。在=之后,我必须指定要匹配的内容。我想匹配任何3个字符,所以...就可以了。(因为字符类之外的.与任何字符匹配)
(作为替代解决方案,我也可以使用.{3},就像我在答案3中所做的那样。
意思是“匹配任意字符,精确匹配3次”)
产生(?=...)

现在让我们把它插在一起。
首先向左看,以确保我们要匹配的角色至少还有3个其他角色。那么让我们来匹配一下角色吧。
(?<=...)[^@.]

相关问题