如何仅在Lookahead / Lookbehind中打印项目?

时间:2012-08-27 15:54:00

标签: regex

我需要使用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)

有没有办法只打印匹配的模式?

1 个答案:

答案 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;是电子邮件地址