正则表达式 - 可以替换匹配组的一部分吗?
Regex - replacing part of a matched group possible?
是否可以替换匹配组中的一半或 x 个字符?
我收到了部分电子邮件捕获请求,因此 example123@abcdef.com
变成了 ***mple123@***def.com
如果@前后的字符都是3个字符长,我可以这样做,
([^|@]{0,3})([^]{0,3})
这完美地捕获了 123@abc.com
,我可以用 ***@***.com
代替,但是如果它的每一端超过 3 个字符,例如 example123@abcdef.com
它变成 ******e123@abcdef.com
我能看到的另一种方式是捕获 @
之前的所有内容,以及 .
之前的所有内容,但这不会是部分捕获。这可能吗?
您可以使用
sed -E 's/^[^@]{0,3}|(@)[^.]{0,3}/***/g'
详情
-E
- 启用不需要太多转义的 POSIX ERE 语法
^[^@]{0,3}
- 在字符串 开头出现除 @
之外的任何字符零到三次
|
- 或
(@)
- 第 1 组:一个 @
字符
[^.]{0,3}
- 除 .
之外的任何字符出现零到三次
***
替换为第 1 组值 + ***
.
是否可以替换匹配组中的一半或 x 个字符?
我收到了部分电子邮件捕获请求,因此 example123@abcdef.com
变成了 ***mple123@***def.com
如果@前后的字符都是3个字符长,我可以这样做,
([^|@]{0,3})([^]{0,3})
这完美地捕获了 123@abc.com
,我可以用 ***@***.com
代替,但是如果它的每一端超过 3 个字符,例如 example123@abcdef.com
它变成 ******e123@abcdef.com
我能看到的另一种方式是捕获 @
之前的所有内容,以及 .
之前的所有内容,但这不会是部分捕获。这可能吗?
您可以使用
sed -E 's/^[^@]{0,3}|(@)[^.]{0,3}/***/g'
详情
-E
- 启用不需要太多转义的 POSIX ERE 语法^[^@]{0,3}
- 在字符串 开头出现除 |
- 或(@)
- 第 1 组:一个@
字符[^.]{0,3}
- 除.
之外的任何字符出现零到三次
***
替换为第 1 组值 +***
.
@
之外的任何字符零到三次