次のルールを持つ正規表現を作成する方法を教えてください。
- 「;」で終了または開始することはできません
- ";" 分離する必要があります
- 少なくとも 1 つの「;」が必要です ただし、「;」は 3 つまでです。
例 1. s;dsdd;sd - 有効 2. sdasd;dasd; - 無効 3.sd;dsd;dasd;dasd; - 無効 4.;dasd;dasd; - 無効
次のルールを持つ正規表現を作成する方法を教えてください。
例 1. s;dsdd;sd - 有効 2. sdasd;dasd; - 無効 3.sd;dsd;dasd;dasd; - 無効 4.;dasd;dasd; - 無効
これがあなたの正規表現です:
^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$
この正規表現は、基準ごとに個別の部分を使用します。
^
入力の開始(?!.*;;)
;;
入力がどこにも含まれていないと主張する「否定的な先読み」(?=(.*;){1,3})
;
入力に 1 ~ 3文字が含まれていることを確認する「前向き先読み」[^;].*[^;]
非;
文字で開始および終了する$
入力の終わりこのようにする利点は次のとおりです。
「ルックアラウンド」およびその他の高度な正規表現の概念の説明については、このサイトを参照してください。
指定しなかったため、perl と互換性があると仮定します。
/^[^;]+(?:;[^;]+){1,3}$/
仕組み:
^
行頭にアンカーします。
[^;]
「;」以外の任意の文字に一致します
修飾子は、前のタイプの+
少なくとも 1 つ (1 つ以上) と一致します。
(?: )
非キャプチャ グループです。()
この場合、キャプチャのグループ化だけに使用することもできます。
;[^;]+
リテラル セミコロンの後に 1 つ以上の「非セミコロン」が続くものと一致します。
{1,3}
. フォームの中括弧は、{m,n}
少なくとも前のシーケンスの繰り返しを必要としm
ますn
(この場合は(?:;[^;]+)
)
最後に$
、行末に固定します。
一致させたくないものではなく、一致させたいものを指定すると、おそらく最も簡単です。セミコロンの間に大文字と小文字と数字を含める必要がある場合は、次のようにすれば十分です。
/[A-Za-z0-9](;[A-Za-z0-9])*/
読み取り、トークンに一致し、最初に 1 つのセミコロンで分割された数のトークンが続きます。