我需要使用PCRE正则表达式在一行中提取电子邮件和邮政编码。该行可以包含任意顺序的其他字段。每个字段如果退出,只发生一次。仅当两个字段都存在时,正则表达式才会打印结果。
我写了这个正则表达式,但显示了整行
^(?=.*?[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
prints ==> 11061 abc@mydom.com
f1 f2 f4 f3 xyz@mydom.com 10018
prints ==> xyz@mydom.com 10018
f2 f4 10048 f3
prints ==> (null)
有没有办法只打印匹配的模式?
答案 0 :(得分: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}))
group&#34; zip&#34;是拉链
group&#34; email&#34;是电子邮件地址