0

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

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

我可以通过转义其他特殊字符(如 (+[]/) 等元字符)来工作。

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

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

我该如何替换它们?就我而言,我试图从单词中删除或去除特殊字符,而这 3 个符号似乎是唯一我无法替代的符号。

4

3 回答 3

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

尽管如此,它在编写时与您的示例中的工作方式相同。所以我猜这个错误在你的代码中的其他地方。你能展示更多吗?)

于 2012-07-07T16:22:52.637 回答
2

正如其他人指出的那样,您的角色在任何方面都没有特别之处,因此您的代码应该可以正常工作。

我想补充一点,替换运算符可能不是从字符串中删除字符的最佳方法。无需为此调用正则表达式引擎的强大功能和复杂性。我会改为使用音译运算符(请参阅perldoc perlop中的 tr/// )。

$ perl -E'$ARGV[0]=~ tr/<>=//d; say $ARGV[0]; ' 'a<>=b'
ab
于 2012-07-08T15:04:38.473 回答
1

<、> 和 = 没有什么特别之处,它们不是元字符,所以你甚至不需要转义它们

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

给我 ab

你的问题来自别的东西

于 2012-07-07T16:21:21.537 回答