1

x1,x2,x3 のようなコンマで区切られた一連の単語があります....このシーケンスのいくつかの単語はオプションである可能性があります。つまり、シーケンス x1,x3,x4,x6 は有効で、x2 と x5 はオプションであり、残りの単語はオプションです。単語は必須です。上記のシーケンスは、最大 n 回まで繰り返すことができます。

たとえば、単語 x1、x2、x3 のシーケンスは、x2 をオプションとして最大 3 回繰り返すことができます。有効なシーケンスは次のとおりです: x1、x3、x1、x2、x3、x1、x3

正規表現パターンを使用して上記を検証するにはどうすればよいですか?

私は次のようなことを試しまし (,{0,1}x1,(x2,){0,1}x3,{0,1}){3} たが、上記はすべての 3 の倍数で機能します。{1,3} を使用すると、1 { 1 ,3} の倍数であるため、任意の回数の繰り返しが一致します。

4

1 に答える 1

2

あなたの例は、ターゲット文字列に一致する文字シーケンスが含まれているかどうかのみをチェックしていることを除いて、正常に動作します。文字列全体が確実に一致するように、文字列の先頭と末尾に正規表現を固定する必要があります。\A\z

また、{0,1}はより単純に として記述され、部分文字列をキャプチャする必要がない場合?、キャプチャ括弧( ... )は非キャプチャ括弧としてより適切に記述されます。(?: ... )

この正規表現の変更を試してください。/x修飾子を使用して、重要でない空白を式に追加して、より適切にレイアウトできるようにします。

m/ \A (?: x1, (?: x2, )? x3 ,? ){1,3} \z /x;
于 2012-05-16T13:10:08.170 に答える