0

次のルールを持つ正規表現を作成する方法を教えてください。

  1. 「;」で終了または開始することはできません
  2. ";" 分離する必要があります
  3. 少なくとも 1 つの「;」が必要です ただし、「;」は 3 つまでです。

例 1. s;dsdd;sd - 有効 2. sdasd;dasd; - 無効 3.sd;dsd;dasd;dasd; - 無効 4.;dasd;dasd; - 無効

4

3 に答える 3

3

これがあなたの正規表現です:

^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$

この正規表現は、基準ごとに個別の部分を使用します。

  • ^入力の開始
  • (?!.*;;);;入力がどこにも含まれていないと主張する「否定的な先読み」
  • (?=(.*;){1,3});入力に ​​1 ~ 3文字が含まれていることを確認する「前向き先読み」
  • [^;].*[^;];文字で開始および終了する
  • $入力の終わり

このようにする利点は次のとおりです。

  • 正規表現は実質的に「読み取り専用」のコードですが、分割すると後で読み取ることができる可能性があります
  • 後でルールを変更/削除/追加する場合、このようにセグメント化すると、正規表現を維持しやすくなります

「ルックアラウンド」およびその他の高度な正規表現の概念の説明については、このサイトを参照してください。

于 2012-05-30T04:58:48.800 に答える
3

指定しなかったため、perl と互換性があると仮定します。

/^[^;]+(?:;[^;]+){1,3}$/

仕組み:

^行頭にアンカーします。

[^;]「;」以外の任意の文字に一致します

修飾子は、前のタイプの+少なくとも 1 つ (1 つ以上) と一致します。

(?: )非キャプチャ グループです。()この場合、キャプチャのグループ化だけに使用することもできます。

;[^;]+リテラル セミコロンの後に 1 つ以上の「非セミコロン」が続くものと一致します。

{1,3}. フォームの中括弧は、{m,n}少なくとも前のシーケンスの繰り返しを必要としmますn(この場合は(?:;[^;]+))

最後に$、行末に固定します。

于 2012-05-30T04:34:11.183 に答える
0

一致させたくないものではなく、一致させたいものを指定すると、おそらく最も簡単です。セミコロンの間に大文字と小文字と数字を含める必要がある場合は、次のようにすれば十分です。

/[A-Za-z0-9](;[A-Za-z0-9])*/

読み取り、トークンに一致し、最初に 1 つのセミコロンで分割された数のトークンが続きます。

于 2012-05-30T04:41:31.147 に答える