使用Perl替换Word中的特殊字符

时间:2012-07-07 16:13:40

标签: perl

除了以下内容之外,我几乎可以替换单词中的所有特殊字符:

">" - greater than symbol
"<" - less than symbol
"=" - equal to symbol

我可以通过转义它们来制作像(+ [] /)这样的元字符的其他特殊字符。

但是,我无法使上述3个特殊字符起作用。

$word =~ s/[\>\<\=]//g; # Delete these special characters from the word

我该如何替代它们?在我的情况下,我试图删除或删除单词中的特殊字符,这3个符号似乎是我无法替代的唯一符号。

3 个答案:

答案 0 :(得分:5)

嗯,即使在正则表达式体内,也不需要转义这些符号,更不用说将它们用作字符类的一部分了。这只是有效:

  my $test_string = '<my_word=some_word>';

  $test_string =~ s/[<>=]//g;
  # $test_string =~ s/<|>|=//g; is correct too, although a bit slower
  print $test_string; # my_wordsome_word

但是,如果在你的例子中写下它works the same。所以我猜错误是你的代码中的其他地方。你能展示更多吗? )

答案 1 :(得分:2)

正如其他人所指出的那样,你的角色在任何方面都不是特别的,所以你的代码应该正常工作。

我想补充一点,替换运算符可能不是从字符串中删除字符的最佳方法。没有必要为此调用正则表达式引擎的功能和复杂性。我会找到音译操作符(参见perldoc perlop中的tr ///)。

$ perl -E'$ARGV[0]=~ tr/<>=//d; say $ARGV[0]; ' 'a<>=b'
ab

答案 2 :(得分:1)

&lt;,&gt;没什么特别之处和=,它们不是元字符,所以你甚至不需要逃避它们

perl -E'$ARGV[0]=~ s{[<>=]}{}g; say $ARGV[0]; ' 'a<>=b'

给我ab

你的问题来自别的东西