Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

正規表現について

またご質問させていただいております。
javaの正規表現についてちょいと
正規エンジンでどういう処理になっているかを
具体的に知りたいので知っているかたが
いましたら教えてください。
結果としては問題なく動作しているのですが
正規表現は内部処理を知っていない状態で
使用するのは危なっかしいので…

以下、質問です。
正規表現でメタキャラなどを文字として
扱いたい場合ってエスケープを使用しますよね?
んでマッチングパターンとして「-」を使用したいときに
普通に指定してしまうと「〜」になってしまいます。
んでエスケープで\-だとマッチングしません。
\\-だとマッチングします。一体どういう処理になっているのでしょうか?

APIでは「実際には、異なるメタキャラクタのセットは、文字クラスの外部ではなく内部に存在することに留意してください。たとえば、正規表現 . は、文字クラス内部ではその特殊な意味を失いますが、表現 - は範囲を示すメタキャラクタになります。 」とあります。
色々と試してみましたがこの文字「-」が特殊な扱いに
なっているみたいでこれ以外は通常のエスケープで置き換わります。
デバッガで「\-」と「\\-」のときを見て見ましたが特になんら変わりはありませんでした。
色々と調べては見たのですが結局内部処理でどういう扱いなのかは行き着けませんでした。
ご存知の方がいましたらよろしくお願いいたします。

2

回答

2596

閲覧

2件の回答

評価

0

\\-
が正解
-以外にも?[]()等利用するときは
\\でエスケープする

正確に言うと\でエスケープするんだけど
文字列""内では\は\\で表現しないといけないから
\\になるのね

評価

0

>てんこさん
ありがとうございます!(^^)
なるほど…
正規表現エンジン内部に渡すときじゃなくて
その前のStringでの文字列の処理なわけですね…(^^;
良くわかりました!
ってことで解決です!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。