2016-08-01 22 views
2

ASCII文字、数字、ハイフン、アンダースコア、およびスラッシュを許可するための正規表現構文を作りたいと思います。Javaで正規表現の構文を作る方法

現在、私は次の構文を使用していますが、私はそれが正常に動作している正規表現から「/」を削除すると、それはしかし、

if (!id.matches("[a-zA-Z0-9_-/]+")) { 
    throw new IllegalArgumentException("Invalid ID: \"" + id 
      + "\". An ID may not be the empty string and must contain only ASCII letters, digits, hyphens and underscores and forward slash."); 
} 

が機能していません。この状態でスラッシュを追加するにはどうすればよいですか?

私は正規表現のチュートリアルを見て、いくつかの例がありますが、それらは個別です。私はASCII文字、数字と一緒にスラッシュを使用したい。

+2

エスケープ ' - '。 '' [a-zA-Z0-9 _ \ - /] + ') 'または文字クラス' '[a-zA-Z0-9 _/- ] +」)の末尾に移動します。 – Tushar

+0

セクション2 [ 'documenation'(http://stackoverflow.com/documentation/regex/1757/character-classes/9991/character-class-and-common-problems-faced-by-beginner#t=20160801073324764453)**から2.1 ** – rock321987

+0

文書は非常に便利です。ありがとう。 –

答えて

5

_-/で範囲を作成します。

のどちらかが最後にハイフンを入れて(そして常にそこにそれを維持):

if (!id.matches("[a-zA-Z0-9_/-]+")) 
          ^

をそれとも、常にリテラルのシンボルとしてそれを治療するためのハイフンをエスケープ:

if (!id.matches("[a-zA-Z0-9_\\-/]+")) 
          ^^^ 

NOTE :いくつかの議論がありましたが、正規表現がさらに改善/拡張/拡張される場合には、リテラル-記号として扱われるべきハイフンをエスケープすることが最善の方法ですide文字クラス。

+0

解決策があなたに役立つ場合は、回答を受け入れることを検討してください([回答を受け入れる方法](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を参照) 。 –