0

PCRE 正規表現を使用して、電子メールと郵便番号の両方を 1 行で抽出する必要があります。行には、任意の順序で他のフィールドが含まれる場合があります。各フィールドが存在する場合、一度だけ発生します。正規表現は、両方のフィールドが存在する場合にのみ結果を出力します。

この正規表現を書きましたが、行全体が表示されます

^(?=.*?[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)(?=.*?\b[\d]{5}\b).*$

例:

f1 f2 11061 f3 abc@mydom.com f4
プリント ==> 11061 abc@mydom.com

f1 f2 f4 f3 xyz@mydom.com 10018
プリント ==> xyz@mydom.com 10018

f2 f4 10048 f3
プリント ==> ( null )

一致したパターンだけを印刷する方法はありますか?

4

1 に答える 1

0

どうですか:

(\d{5})|([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}) << only if the input contains BOTH

編集:

(?:(?<zip>\d{5}).*(?<email>[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}))|(?:(?<email>[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}).*(?<zip>\d{5}))

グループ「zip」はzipです

グループ「email」はメールアドレスです

于 2012-08-27T16:01:34.317 に答える