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

他の人が指摘しているように、あなたのキャラクターは決して特別なものではないので、あなたのコードはうまくいくはずです。

置換演算子は、文字列から文字を削除するための最良の方法ではない可能性があることを付け加えたいと思います。このために正規表現エンジンのパワーと複雑さを呼び出す必要はありません。代わりに音訳演算子を使用します(perldocperlopの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 に答える