1

私は確かに正規表現の専門家ではありませんが、入力文字列を検証したいと考えており、さまざまな検証のために if/else ステートメントを書くことは、これを行う方法ではありません。私はJavaを使用しています。

入力は、コロン (:) で区切られた 3 つの値のタプルの形式になります。最初の値は整数 (サイズ/長さの点で潜在的に長い) で、他の 2 つの値は数値または文字列です。

たとえば、次の値が有効です。

  • 1:x:456
  • 2:2:3
  • 3:abc:123

..そして、これらはしません:

  • x:1:2
  • 1::2
  • 1:3::x
  • 1:2
  • fyz::2:1
  • 1:3::3

正規表現を使用してこの入力を検証する比較的簡単な方法はありますか?

4

5 に答える 5

1

マッチングNumbers:(letters OR numbers):(letters OR numbers)

2 番目と 3 番目の部分のみを数字または文字にする必要がある場合は、次のパターンを使用できます。

String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";

基本的には、一連の数字 ( \\d+) と、それに続く 2 回繰り返される一連の文字を探します。

  • aa で始まり:、その後に続く
    • 一連の文字 (英語)、つまり[A-Za-z], OR
    • 数列

および文字はアンカーで^あり$、「文字列の始まり」と「文字列の終わり」を意味します。

例:

public class RegexTest {
    public static void Main(String[] args) {
        String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";
        String example = "333:abc:123456";
        if (example.matches(pattern)) {
           System.out.println("Matches");
        }   
    }
}

マッチングNumbers:(both letters and numbers:(both letters and numbers)

これには、次のパターンを使用できます。

String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";

一致するもの:

  • 一連の数字の後に続く
  • コロンの後に任意の文字または数字の組み合わせが続く
    • このシーケンスを 2 回繰り返します

   public class RegexTest {
        public static void Main(String[] args) {
            String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";
            String example = "333:a3b4c:12adf3456";
            if (example.matches(pattern)) {
               System.out.println("Matches");
            }   
        }
    }

この例は一致します。

于 2012-04-26T00:36:27.743 に答える
1

2 番目と 3 番目の値を混在させることができる場合:

/^[0-9]+:[0-9a-zA-Z]+:[0-9a-zA-Z]+$/

文字列のみまたは数値のみの場合:

/^[0-9]+:([0-9]+)|([a-zA-Z]+):([0-9]+)|([a-zA-Z]+)$/
于 2012-04-26T00:17:46.580 に答える
1

次のことをお勧めします。

 ^[0-9]+:[^:]+:[^:]+

行頭、数字、コロン、任意の数のコロン以外の文字、コロン、コロン以外の文字。

これは、数字で始まるコロンで区切られた最も柔軟な形式である必要があります。

于 2012-04-26T00:25:46.523 に答える
0

次のように、文字列が引用符で囲まれた文字列内にコロンを含む場合:

1234:"Ratio is 1:20":"Fuel:Oil"

次に、文字列内のコロンを回避する必要があります。バートン・チッテンデンの答えに基づいて、これを使用できます:

^(\d+):(".+?"|[^"][^:]*):(".+?"|[^"][^:]*)$

regexr で参照してください。のようなばかげたものでは壊れ123:":"ますが、これらのエッジケースも処理するように正規表現を変更できます。

于 2012-04-26T01:29:48.257 に答える
0
    /\d+:\[a-zA-Z0-9]+:\[a-zA-Z0-9]+/

あなたができる最大の長さを知っていれば

    /\d{1,X}:[a-zA-Z0-9]{1,Y}:[a-zA-Z0-9]{1,Z}/
于 2012-04-26T00:19:40.883 に答える