2016-05-13 6 views
2

変数の結果に基づいてオンザフライで正規表現を作成します。私は正常に表現のほとんどをテストしましたが、私は長さが変わる可能性のある部分では苦労しています。文字列の一部または全部と一致する正規表現

正規表現(a_)?c(davison)\.nsf?を修正して、以下のいずれかの文字列を一致として分類するにはどうすればよいですか?

  • 一致と見なされるcdaviso.nsf
  • cdavis.nsf基本的に

  • cdavison.nsf
  • a_cdavis.nsf、文字列は次の基準を満たす必要があります -

    1. "(a_)?" - 「A_」で始まるかもしれませんが、
    2. 「C」に持っていない - 私が行うことができないビット - 小文字「C」
    3. 「(デイヴィソン)」が含まれている必要があり - 「.NSF」を完了する必要があります
    4. - (いわゆる「DAV」が受け入れ可能であるが、「息子は」ではありません)
    5. 「.NSF」先頭から始まる、一部または「デビソン」のすべてが含まれている必要があり
    6. 長さ - 長さが12文字以下で、オプションの "_a "と文字列の最後に必要な" .nsf "が含まれています。

    ヒントとヒントがあります。

    答えて

    4

    ネストされた任意の基(?:...)?)を使用し、長さ制限を設定するために、davisonの各部分をオプションにするには、13の文字が見つかった場合、一致が失敗する開始時に固定され、負の先読みを使用することができるが(従って、(?!.{13}))は、サイズが12と少ない文字の文字列を許可します:

    ^(?!.{13})(a_)?c(d(?:a(?:v(?:i(?:s(?:on?)?)?)?)?)?)\.nsf$ 
    

    regex demo

    +2

    が、これがまた 'cson.nsf'とは一致しませんか? 」と言っていますか?「 –

    +0

    それは期待されていませんか?いいえ、私はあなたが必要と思います(d(a(v(...)?)?)そうでなければ、文字は常に互いに続くべきである。 '^(?!。{13})(a_)?c(d(? )?)?)?)?)?)\。nsf $ 'は役に立ちます。 –

    +0

    言語の種類によって異なります。 JSでは、[これと似たような](https://jsfiddle.net/rsLngq2g/)でしょう。 –

    関連する問題