2016-09-29 17 views
2

私は最後の4がオプション(5 + 4)の9桁の数字を持っています。 26505002300002123010
失敗例:20000私は最初の5つの文字RegEx、文字列には1〜9のうちの少なくとも2つの数字が含まれます

の作業例では、少なくともTWO [1-9]の値(位置に関係なく)が存在すべきであることを言いたいです、02000

は、私はこれを建て、私が望むように動作していない:

^(?=[1-9]{0,4}\d)\d{5}(-?\d{4})?$ 
+0

私は質問を再フォーマットしました。正しいことを確認できますか? – chris85

+0

@SaucedApples、質問を編集するときは注意してください。あなたはあなたの編集でその正規表現のコンテキストを変更しました。 – chris85

+0

すべてのバージョンが私のために働いています、https://regex101.com/r/J97oBC/1。あなたの使い方を見せてもらえますか? – chris85

答えて

1

大部分の正規表現エンジンには、一般的で簡単に拡張可能な正規表現ソリューションはありません。このケースでは、

^(?!0{5}|0{4}[1-9]|0{3}[1-9]0|0{2}[1-9]0{2}|0[1-9]0{3}|[1-9]0{4})\d{5}(?:-?\d{4})?$ 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

でのようにすべての可能な組み合わせを綴ることができます最初の5桁が1桁1-9と他の人がゼロにのみ含まれている場合は、負の先読みはマッチに失敗regex demoを参照してください。

ただし、確認する数字が5桁を超える場合(50など)は、扱いにくくなります。

一般的な正規表現のソリューションは、あなたの正規表現は無限幅の後読み(.NET、Pythonのは、PyPIの正規表現モジュール)をサポートする場合には、あなたが

^\d{5}(?<=^\d*(?:[1-9]\d*){2})(?:-?\d{4})?$ 

を使用することも可能である(?<=^\d*(?:[1-9]\d*){2})後読みthis regex demo

が表示されます文字列の先頭から5桁目の間の任意の桁に2 1-9の数字が必要です。

+0

私はそれがregexplanet.comサイトで働くことができませんでした – tomsam

+0

リンクはhttp://fiddle.re/4tv4ka –

+0

ちょうどICUの拘束幅lookbehindでテストされ、そのエンジンのためには複雑すぎます。 –

0

を私は私の正規表現がAPを使用していることを考えますositive lookbehindは少し楽になり、より読みやすくなります。

(\d{5})(?<=[1-9]{2})-(\d+) 

ライブ例:https://regex101.com/r/CnEw7Z/2

説明 - これは続いてD {5} \一致するフィールドに1〜9の2つの文字を有していなければならない、5つの数字の組がありますハイフンとその他の数字(¥d +)

これが意味を成しているかどうかを私に教えてください。あなたの好みに合わせてキャプチャグループを自由に調整してください。

+0

このアプローチは、幅が無限のlookbehindの場合に機能します。 –

+0

それで、私はhttp://www.regexplanet.com/advanced/java/index.htmlで働くことができませんでした – tomsam

+0

これは、最初の5桁のグループの最後の2桁が1と9の間にある場合にのみ機能します。 、26505質問に一致する必要がありますが、この正規表現は一致しません。 – jemartin80

関連する問題