2016-12-19 9 views
2

私は現在、正確に8桁に一致する必要がある正規表現に取り組んでいます。しかし時にはそれらの数字の間にスペースやドットがあることがあります。これは私が現在使っている正規表現です。Regexが一定量の文字に一致し、その間に空白を入れてください

([0-9\ ?.?]{7,16}) 

それはほとんどの時間を正常に動作しますが、私が午前問題は、それが時々スペースの多くは、それはあなたが/ S/S/S/S 1234のようなものを取得しますテーリングと番号と一致していることです(/sはスペースを表します)。

私が望むのは、少なくとも8桁の数字にマッチする正規表現で、8桁以下の数字を検出することなくスペースとドットも使用できます。私はそれが愚かな質問かもしれないことを知っていますが、私はどこにでも必要なものを見つけることができませんでした。

+1

したがって、*正確に** 8桁*または*常に少なくとも** 8桁*と一致する正規表現*に一致しますか? –

+1

数字以外の文字列を空の文字列で置き換え、新しい文字列の長さをチェックするのはなぜですか? – TheLostMind

+0

それはちょうど8桁でなければなりません –

答えて

3

([0-9\ ?.?]{7,16})の式は、数字またはスペース、または?、または.のいずれかの文字が7〜16回出現すると一致します。はい、?の中に[...]は、リテラル?であり、量子ではありません。

あなたは1桁に続く数字([0-9])と一致する式とスペースまたはピリオド([ .])の後、正確に7配列を使用すること、そしてあなたが123.156.78.146で数字に一致していないことを確認する必要がありますがかもしれませんスペースまたは.のみ0数字の間での1にすることができた場合

(?<!\d[ .]?)\d(?:[. ]?\d){7}(?![ .]?\d) 

;:特別な境界線を使用または - スペース/ドットはregex demo

(?<!\d[ .]*)はそれが.と続いている数字で始まる場合、一致するものがすべて失敗します負の後読みである参照してください

(?<!\d[ .]*)\d(?:[. ]*\d){7}(?![ .]*\d) 

、0回以上現れることができるかどうか必要な7桁の後に.(s)またはスペース(s)と数字が続く場合は、(?![ .]*\d)ネガティブルックアヘッドはマッチに失敗します。

1

これを解決するには、問題を自分自身で説明します。 1桁の数字に続いて、スペースまたはドットの後に数字を7回繰り返して一致させたいとします。これは、\d([ .]?\d){7}のような正規表現につながります。 7つのキャプチャを収集しないようにするには、(の後に:?を追加します。文字列全体をキャプチャするには、角カッコで囲みます。両方の変更を追加すると、式(\d(:?[ .]?\d){7})が得られます。数字の間に複数のスペースまたはドットがある場合は、?*に変更します。

文字列の8桁を取得するには、上記でキャプチャした文字列を使用し、空白またはドットを何も置き換えないでください。

関連する問題