2017-08-18 6 views
0

私はオフィスG Suiteアカウントの電子メールルーティングで特定のアドレスから電子メールをフィルタリングするためにregexを使用しようとしています。そのために、私は次の操作を実行するために、次の正規表現を作成しました:PCRE regexをRe2 Regexにネガティブな先読みなし

  1. ドメイン「domain.com」
  2. からすべての電子メールアドレスを受け入れ、そのドメインからのすべてのこれらのアドレスの2を拒否します。

そうするためには、私が言った機能を完了します、次の正規表現を作成しました:

^(?!test|tes2)[A-Z0-9._%+-][email protected]$ 

この1つは両方の[email protected][email protected]を拒否し、すべて受け入れますが前記ドメインからの他の組み合わせ。

しかし、G・スイートは、PCRE正規表現を受け入れていないので、私は現在、これを達成することはできません。

は一時的に、私は言ったドメインからのすべての電子メールアドレスを受け入れるために、次のRe2の正規表現を作成しました:

(\W|^)[\w.+\-]{0,25}@(domain)\.com(\W|$) 

どのように私は前後参照以来、目的の機能をRE2正規表現で許可されていない可能にし、これを拡張することができますか?

答えて

1

この否定先読みが固定サイズですので、それはそうのようにそれを拡張することは比較的簡単です。しかし、それは複雑に爆発します。読みやすさのためにコメントとスペースを追加しました。

^ 
(# not /^t/ 
     [A-SU-Z0-9._%+-][A-Z0-9._%+-]* 
| # /^t/ but not /^te/ 
    t ([A-DF-Z0-9._%+-][A-Z0-9._%+-]*)? 
| # /^te/ but not /^tes/ 
    te ([A-RT-Z0-9._%+-][A-Z0-9._%+-]*)? 
| # /^tes/ but not /^tes[t2]/ 
    tes ([A-SU-Z013-9._%+-][A-Z0-9._%+-]*)? 
) @domain.com $ 
+0

興味深いです。ですから、これを2つの全く異なるものに適用すると(testとtes2は非常に似ています)、johnとdaveと同じような原則を守るべきでしょうか? –

+1

@ KavindaKeshanRasnayake各文字位置に2つの別々の枝があることになります。 '(?!abc | def)'→ '[^ ad] | a [^ b] | ab [^ c] | d [^ e] | de [^ f] ' – ephemient

関連する問題