【发布时间】:2015-09-13 02:27:34
【问题描述】:
我想替换 perl 脚本中给定字符串(包括转义字符)中的子字符串(包括转义字符)。如果可能的话,使用正则表达式。
输入:
abcdefg hijkl: (mnop-qrst) uvwx
aabbccd deeff: (gghh-iijj) kkll
aaabbbc ccddd: (eeef-ffgg) ghhh
替换字符串示例:
ijkl:
gghh-iijj
ccddd: (eeef-ffgg)
输出:
abcdefg hXXXX: (mnop-qrst) uvwx
aabbccd deeff: (XXXX-XXXX) kkll
aaabbbc XXXXX: (XXXX-XXXX) ghhh
除了文章“有没有办法用与它的长度相同数量的 X 字符替换子字符串?”文章之外我没有找到任何东西,但是没有转义字符。
正则表达式 $s =~ s/(\Q$pattern\E)/'X' x length $1/e; 适用于任何字母数字替换字符串,但如果它包含特殊字符(如 ()=,.-:;*)则不适用
在上面的示例中,输入字符串和替换字符串都可以包含特殊字符。
【问题讨论】:
-
stackoverflow.com/help/mcve
<<< -
好的,您已经指定了替换字符串
(eeef-ffgg)- 但希望将其替换为(XXXXXXXXX)?所以我认为您想要对括号中的内容进行不同的处理? -
我有一个给定的替换字符串“ccddd: (eeef-ffgg)”。如果文本是“aadd: (eeef-ffgg)”之类的其他内容,则不应替换任何内容。括号中的内容没有特别的威胁。我只想让 perl 在一个输入行中查找完全相同的替换字符串。如果找到结果,它应该用 X 替换除特殊字符和空格之外的任何内容。
-
@lycos:你怎么称呼`特殊字符?为什么
ccddd: (eeef-ffgg)被XXXXX: (XXXXXXXXX)而不是XXXXX: (XXXX-XXXX)取代?为什么括号和冒号是特殊的,而连字符不是?除了字母和数字之外还有什么不是特殊的吗? -
@Borodion:连字符也应该是特殊字符。我更正了上面的例子。
标签: regex perl escaping substring