Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex 在Perl中,如何使用正则表达式替换运算符替换子字符串中的非ASCII字符?_Regex_Perl - Fatal编程技术网

Regex 在Perl中,如何使用正则表达式替换运算符替换子字符串中的非ASCII字符?

Regex 在Perl中,如何使用正则表达式替换运算符替换子字符串中的非ASCII字符?,regex,perl,Regex,Perl,如何使用此命令: perl -pi -e 's/[^[:ascii:]]/#/g' file 要仅将每行的偏移量A处的字符更改为偏移量B吗?在我没有正确理解您的问题的保留下,如果偏移量A和B分别为5和10,则应如下所示: perl -pi -e 's/(?<=.{5})(?<!.{10})[^[:ascii:]]/#/g' file substr EXPR、OFFSET、LENGTH的描述可以是。 这个例子很好地说明了如何使用substr()作为左值。 附录2 当更新这篇文

如何使用此命令:

perl -pi -e 's/[^[:ascii:]]/#/g' file

要仅将每行的偏移量A处的字符更改为偏移量B吗?

在我没有正确理解您的问题的保留下,如果偏移量A和B分别为5和10,则应如下所示:

  perl -pi -e 's/(?<=.{5})(?<!.{10})[^[:ascii:]]/#/g' file
substr EXPR、OFFSET、LENGTH的描述可以是。
这个例子很好地说明了如何使用
substr()
作为左值。
附录2 当更新这篇文章时,添加了与答案相同的解决方案,但他的答案是第一个!(所以他应该得到战利品)

问候


rbo

除了橡胶靴的答案外,您还可以操作一个子字符串,而不是从整个字符串开始:

perl -pi -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' file
举例说明:

perl -e 'print "\xff" x 16' | \
perl -p -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' | \
hd
将打印

ff ff ff ff ff 23 23 23  23 23 ff ff ff ff ff ff
在这段代码中,第一个偏移量是基于0的,您必须使用长度而不是第二个偏移量,因此它将是
substr($\uz,A-1,B-A)

一些实际和预期的数据示例会有所帮助。我也没有注意到标题中的“with substr”,或者更确切地说,将其解释为“在子字符串内”,因此我认为您的解决方案的有效性不亚于我的解决方案。。。
perl -pi -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' file
perl -e 'print "\xff" x 16' | \
perl -p -e 'substr($_, 5, 5) =~ s/[^[:ascii:]]/#/g' | \
hd
ff ff ff ff ff 23 23 23  23 23 ff ff ff ff ff ff