2016-10-03 7 views
2

多分私はこれを正確に表現しているわけではないかもしれませんが、何か役立つものは見つけられませんでした。私は10の記号の正確な長さと数字とダッシュを一致させる必要があります。正規表現は次のようになります。特定の長さを持つ複雑な正規表現パターン

/[0-9-]{10}/g 

キャッチが、これは「8888888888」をマッチすると「----------」はそれぞれ、私はそれを避けたいということです。私の出力は数字に似ているはずですので、 ' - 'と 'digit'の両方が表示されていればマッチします。 '555-45-217'、'12 -34-5412 '、' 1-2- 3-45-6。これはこれまで私が持っているものです:

([0-9]+-[0-9]+(-[0-9]+)*){10} 

しかし、これは動作しません。 {}は、following()のときにエラーを出します。だから私の質問は、どのように私はそのような目標を達成することができますか両方の条件(内部のルールと適切なシンボルの量)が両方とも存在する場合にのみどのように一致させるか。

答えて

1

私はあなたがregex demo

詳細を参照してください

^(?=[0-9-]{10}$)\d+(?:-\d+)+$ 

を使用することができると思う:

  • ^ - 文字列の先頭
  • (?=[0-9-]{10}$) - 文字列のみが10で構成する必要が文字、数字または-
  • \d+から1桁以上
  • (?:-\d+)+ - 文字列の末尾 - -の1またはそれ以上の配列が1+数字
  • $と続きます。
+0

こんにちは、ウィクスターです。応答していただきありがとうございます。さて、私がこれを正しく取得するかどうかを見てみましょう。最初の()のセットで長さを指定し、複数の '-num'セクションのルールを設定します。今、私は開始時に '+'とマッチするように変更しようとしています - '+ 555-12-345'。最後に、長い文字列で一致するものを見つける必要があるので、 '(?= \ s |%)'のようなものを探すために最後の区切り記号が必要です。前回のルックアヘッドでは10シンボルの長さしか指定されていないため、この最後の先読みが機能していない可能性があります。 idk。 – Alex

+0

オプションの '+'と単語の境界は次のようにしてください:\ +(?= [0-9 - ] {10} $)\ d +(?: - \ d +)+レスキュー:['\ +?(?= [0-9-] {10} \ b)\ d +(?: - \ d +)+ \ b'](https://regex101.com/r/tLQ3fZ/ 2)。 –