2016-04-08 16 views
2

次の正規表現は2つの異なる文字列と一致しません。正規表現で特殊パターンを見つける方法

実際の正規表現はAB-434です。どちらも一致しませんTEMS-54534。ここ

([a-zA-Z][a-zA-Z0-9_]+-[1-9][0-9]*)([^.]|\.[^0-9]|\.$|$) 

あなたは1つのASCIIの文字で始まるパターンを探しているように見えるサンプル入力

TEMS-54534 

TEMS-5453 

TEMS-1233 

TEMS-12 

CB-213 
CB-2135 
CB-12 

ABC-2223 
ABC-223 
ABC-12 
+0

それは前と '-'後に任意の数字/文字と一致する必要がありますか? – dambros

+4

2〜4文字、3〜5文字、またはまさにそれらの組み合わせに一致しますか?一致するはずの入力と、一致しない別の入力のリストを入力してください。 – Bohemian

+1

[作品は?](https://regex101.com/r/tE0mM7/1) – Druzion

答えて

3

は、1つの以上の英数字またはアンダースコア文字で続いていると続い-に続きます1つ以上の数字が0で始まらない

あなたは

^[a-zA-Z][a-zA-Z0-9_]+-[1-9][0-9]*$ 

または

^[a-zA-Z]\w+-(?!0)\d+$ 

を使用することができますがregex demo(およびanother one)を参照してください。

説明

  • ^ - 文字列の先頭
  • [a-zA-Z][a-zA-Z0-9_]+/[a-zA-Z]\w+ - ハイフン
  • [1-9][0-9]*/(?!0)\d+ - ASCII文字は英数字1+ /下線文字
  • -に続きます - 1-9の範囲から0桁の数字とそれ以外の桁までの数字必要であれば){min,max}制限数量詞とそれをtは
  • $ - 文字列の末尾

詳細:NO Pattern.UNICODE_CHARACTER_CLASSを使用しない場合

  • [a-zA-Z0-9_]が(\wのように書くことができる)
  • でJavaの場合は、二重バックスラッシュを使用して、メタキャラクタと短縮文字クラスをエスケープすることを忘れないでください。
  • パターンをString#matches()の場合、開始時の^とパターンの最後の$は冗長です。

そしてJava demo

List<String> strs = Arrays.asList("TEMS-54534","TEMS-5453","TEMS-1233","TEMS-12","CB-213", 
    "CB-2135","CB-12","ABC-2223","ABC-223","ABC-12"); 
for (String str : strs) 
    System.out.println(str.matches("[a-zA-Z]\\w+-(?!0)\\d+")); 
+0

また、 '[a-zA-Z0-9_]'の代わりに '\ w'を使用してください。 – Bohemian

+0

はい、Javaでは理にかなっています。 –

関連する問題