1

1 つまたは複数の文字列範囲を持つことができる文字列があります。これらは正しい文字列です:

""
"asd-asd"
"asd-asd;asd-asd"
"asd-asd;asd-asd;"
"asd-asd;asd-asd;asd0-asd1"

しかし、文字列"asd0-asd1-asd2"は有効であってはなりません。私は次の正規表現を書きました:

^(([^;-]+-[^;-]+);?)*$

そして、期待どおりに機能しません。この正規表現は、この文字列が一致していることを示しています。なんで?

4

4 に答える 4

4

正規表現をもう少し複雑にする必要があります。

^([^;-]+-[^;-]+(;[^;-]+-[^;-]+)*)?$

説明:

^               # Start of the string
(               # Start of first group:
 [^;-]+-[^;-]+  # Match one "asd-asd"
 (              # Start of second group
  ;             # Match ;
  [^;-]+-[^;-]+ # Match another "asd-asd"
 )*             # Repeat the second group any number of times (including zero)
)?              # Make the entire first group optional     
$               # End of string
于 2013-10-15T09:18:49.450 に答える
1

;? のために一致します。を作る; オプション。コンテキストで何かをテストしようとしています。正規表現はこれを行うための最も簡単なツールではありません。

于 2013-10-15T09:13:35.367 に答える
1

セミコロンをオプションにするのを避けるために、代わりに (;|$) を使用できます。
これにより、文字列の最後にいる場合を除き、セミコロンの一致が強制されます。

^(([^;-]+-[^;-]+)(;|$))*$
于 2013-10-15T09:16:05.213 に答える