2016-07-08 4 views
2

文字列を正規表現でチェックする必要があります。複数の長さのパターンのチェック文字列

有効な文字列は、たとえばABC0001またはA00023です。

  1. ように文字列が単語の記号で開始する必要があります:[a-zA-Z]{1,}
  2. が続いて分がある1つのゼロ:[0]{1,}
  3. 第三部は、数ある三つの部分があります

    は、私がチェックする必要があり\\d+

文字列全体が8桁を超えてはいけません。

String NR_PATTERN = "^([a-zA-Z]{1,}[0]{1,}\\d+){3,8}$"; 

問題は、正規表現は、文字列受け付けていないこと、である:KDS0234

+0

をそして、この式で、あなたが持っている悩みはあなたがゼロまたは追加の文字を挿入することで、任意の長さの文字列を持つことができるという事実以外(他のです:


これが一致します'[0]'はベアボーン '0'と同じです)? – dhke

+1

' "^([-ZA-Z] {1} [0] {1} \\のD +){3,8} $"。 ''平均([-ZA-Z] {1} [0] {1} \\ D +) '3~8回出現はなく、全体の長さが3-8 –

+0

このような試しであります:[' "^( ?!。{9})[AZ] +0+ [1-9] \\ dは*の$ "'](http://fiddle.re/12v3ha) –

答えて

3

あなたは初めに肯定先読みで試みることができる:

(?=^.{3,8}$)([a-zA-Z]{1,}[0]{1,}\\d+) 

肯定先読み:

(?=^.{3,8}$) 

?=を先に見て、 ^末尾に$の文字列の場合、.と3〜8の間に一致する文字があります。{3,8}です。あなたがのために行くことができる

1

(…){3,8}あなたがしたいこと...シーケンスを3と8回の間で繰り返されるように、私がこれまで試したどのような

、文字列は8文字ではありません

あなたはちょうどあなたが正規表現が必要だと知っていますが、おそらくこれはあなたのために働くでしょう)

String NR_PATTERN = "[a-zA-Z]+0+\\d+"; 
String s = "ABC0001"; 
boolean match = s.length() < 8 && s.matches(NR_PATTERN); 
1

あなたは先読みして、長さ状態を確認して、あなたのパターンを一致させることができます:

\b(?=[a-zA-Z0-9]{3,8})([A-Za-z]+0[0-9]+)\b 
0
(?=^.{3,8}$)([a-zA-Z]+[0]+\d+) 

・ホープ、このヘルプ

+0

より多くの情報を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。私たちはここで知識のためのリソースとなるよう努力しています。 – abarisone

+0

このコードは、ヘルプは、問題を解決するために が_why_に関する追加のコンテキストを提供する、および/またはそれ が大幅に 長期的な価値を改善することになる質問に答える_how_かもしれないが。あなたの答えを編集して の説明を追加してください。 –

1

\b(?=[A-Z]+0+\d+)\w{3,8}\b 

Java使用、二重のバックスラッシュで、a demo on regex101.comを参照してください。

ABC0001 A00023 and ABCD001 

でもない

B123456 or 0001B 
+1

OP: "文字列全体が8桁を超えていない可能性があります。" – DVarga

関連する問題