0

我需要使用 PCRE 正则表达式在一行中提取电子邮件和邮政编码。该行可能包含任意顺序的其他字段。每个字段如果退出,只会出现一次。仅当两个字段都存在时, Regex 才会打印结果。

我写了这个正则表达式,但显示了整行

^(?=.*?[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

组“电子邮件”是电子邮件地址

于 2012-08-27T16:01:34.317 回答