2012-03-06 24 views
136

可能性の重複:正規表現 - ハイフンをエスケープする必要がありますか?

[0-9A-F] 

しかし:
How to match hyphens with Regular Expression?

ハイフンは範囲を選択するには、例えば、正規表現での特殊文字であるが、私のような何かを行うことができます大括弧の外側には普通の文字だけです。私はこれを2つのオンライン正規表現テスターでテストしました。ハイフンは大括弧の外側にある通常の文字として機能しているようです(あるいは、2つの文字の間にない場合は角括弧の内部でも - 例えば[-g] - またはg)エスケープされているかどうか。私はこれに対する答えを見つけることができませんでしたが、私はハイフンを逃れることが慣習的かどうか疑問に思っています。

ありがとうございます!

+5

不規則な表現を表す言語によって異なります。 – zzzzBov

+3

ここにあなたの質問に答えるべき同様の記事があります:http://stackoverflow.com/a/4068725/56829 –

+4

これは正確な複製ではありません。その質問は、ハイフンを逃れる方法を求めています。私はすでにエスケープする方法を知っていて、エスケープする必要があるかどうかを尋ねています。質問の性質が異なるため、回答の一部が重複しているということは無関係です。再開してください。 – JSideris

答えて

198

すべての正面を修正します。ハイフンは特別な意味を持ちません。文字クラス内では、範囲内の最初または最後の文字(たとえば、[-a-z]または[0-9-])としてハイフンを置くことができます。 ORあなたのクラスにハイフンを追加するには、それをエスケープしてください(例:[a-z\-0-9])。

文字クラス内に最初または最後にハイフンが置かれているのが一般的ですが、決してエスケープすることを選択するために激怒したネクタイの群れによってリンチされることはありません。

(実際には、私の経験では、多くの正規表現が構文を完全に熟知していない人々によって採用されているということがありました。 「特別なもの」とは何でないのか分からないので、彼らは「安全に遊ぶ」という表現を使い、過剰なバックスラッシュを含む表現を難読化します。正規表現の構文を実際に理解してから使用してください。)

大きな質問!

+3

完全に理解しておらず、安全に遊びたい人が過度に逃げることについての興味深い点 – Medorator

+9

+1「激しい兵士の群れ」の精神を理解するのを助けるための+1:D –

+2

非常に便利な答えです。 Eclipse Lunaでは、あなたがそれをエスケープしようとするとJava Linterが文句を言うだろうと分かります。 – Keab42

5

通常、ハイフンは最初に[]マッチセクションに配置します。 EGは、ハイフン(長い道のりを書かれた)を含む任意の英数字を一致させるために、あなたはハイフンをエスケープする従来ではなく、文字クラスの外で[-a-zA-Z0-9]

10

を使用します。私が文字クラスの外にエスケープされたハイフンを見た場合、これは正規表現にあまり慣れていない人によって書かれたことを私に示唆します。

文字クラスの中で、私は一方的な方法が他の方法よりも慣習的ではないと思う。私の経験では、は通常のように、[-._:]または[._:-]のように、バックスラッシュを避けるために最初または最後に置くようです。しかし、私はしばしばそれが代わりにエスケープされていることを見てきました。[._\-:]のように、私はそれを従来の unと呼びません。

関連する問題