0

良い一日、パターンに問題があります[\\d{1,4}]{1,3}+[x?]{0,2}+[\\'?\\d{1,4}]

このパターンは、測定システムが正しく入力されたかどうかを確認する必要があります。

最大の文字列はである可能性があり、最後にあること9999x9999x9999'9999はありませんが、それが半径を意味するという理由xだけである可能性もあります。'9999

だから私の問題は、私が持っている間は正しい9999xか、 :/9999x9999x9999x9999x99999のときは間違っているということです1

なぜ1falseなのか、xそれぞれの後に整数を制限する方法がわかりませんx

より理解するために、これはwidthXheightXdepth'radiusです。

4

2 に答える 2

2

[]文字クラスです。()おそらく代わりに使用したいと思うでしょう。

以前の質問から判断すると、フォームを受け入れたい

Int
Int x Int
Int x Int x Int

そしてまた

Int ' Int
Int x Int ' Int
Int x Int x Int ' Int

したがって、パターンは確実に1つInt、オプションで最大2つx Int、次にオプションで受け入れる必要があります' Int

あなたはこのようにそれを達成することができます。

Int( x Int){0,2}(' Int){0,1}     

{0,1}または使用?マークの代わりに


今、あなたはそれIntが1-9999の範囲にあると言いました。したがって、番号には、範囲内の開始時に少なくとも1桁、範囲内に10〜3桁が含まれ1-9ます0-9。あなたはそれを次のように書くことができます

[1-9][0-9]{0,3}

または代わりに[0-9]使用します\\d(同じです-dは数字から短いです)


これを組み合わせてみると、最終的なパターンが得られます。

于 2013-03-25T16:47:46.920 に答える
0

試す/(?:\d{1,4}x\d{1,4}x\d{1,4})?'\d{1,4}/

最初のパターンをグループ化することもできますが、最初のパターン(?:(?:\d{1,4}x){2}\d{1,4})?の方が少し読みやすいと思います。

文字クラス(括弧で囲まれた部分[])を不必要に使用しています。

また、(x、y、z)トリプレットが完全に定義されているか、完全に存在しない必要があると仮定するとx?、数字があれば、数字も持っている必要があるため、あなたはあなたが望むことをしていませんx

于 2013-03-25T16:34:13.507 に答える