Regex 如何仅在“向前看/向后看”模式下打印项目?

Regex 如何仅在“向前看/向后看”模式下打印项目?,regex,Regex,我需要提取电子邮件和邮政编码在一行使用PCRE正则表达式。该行可以包含任意顺序的其他字段。每个字段如果退出,则只出现一次。只有当两个字段都存在时,Regex才会打印结果 我写了这个正则表达式,但是整行都显示出来了 ^(?=.*?[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)(?=.*?\b[\d]{5}\b).*$ 示例: f1 f2 11061 f3abc@mydom.comf4 打印==>11061abc@mydom.com f1 f2

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

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

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

f1 f2 11061 f3abc@mydom.comf4
打印==>11061abc@mydom.com

f1 f2 f4 f3xyz@mydom.com10018
打印==>xyz@mydom.com10018

f2 f4 10048 f3
打印==>(空)

有没有办法只打印匹配的图案

那么:

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

(\d{5})谢谢他。但我需要正则表达式来打印结果,只有当两个项都在同一行时。此外,邮政编码可能跟在电子邮件后面,反之亦然。不正确吗?有“|”字符(逻辑或)。。。你用哪种语言使用这个正则表达式,用哪种修饰符?整串与逐行比较?不正确。该正则表达式与“12345”匹配。我需要打印只有当电子邮件和邮政编码都存在。我使用Expresso和Google Regex测试仪进行验证。谢谢,如果我没有解释清楚,我很抱歉。当我在没有电子邮件的情况下输入测试数据时,例如使用正则表达式输入“f1 12345 f2”,它返回12345。在这种情况下,Regex不应返回任何内容,因为电子邮件不存在。以下是示例:“f1 12345 f2abc@mydom.comf3“打印12345abc@mydom.com“f1和f2xyz@mydom.com54321 f3“打印件xyz@mydom.com54321“f1 12345 f2”不打印任何内容(空)Oops。。。我刚看到你的新正则表达式,让我稍后测试,去开会。非常感谢他
(?:(?<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}))