正则表达式:如果存在模式,则匹配另一个模式

时间:2014-10-14 09:40:58

标签: regex

我有这个字符串:

tel:+12344390212344943887034;abcd=0032;trunk-context=123abcdef@test.com;user=phone

它必须与tel:匹配,那么数字必须在前面有+。允许的空格:和+ 如果字母E的数量必须是4位数字,那么49就是E123449。 (E并不总是存在)

使用此正则表达式:

^((tel)(:\s*)?\+(E)?\d{4}49*)

但它允许+ E123441,+ E123442等无效

4 *号似乎有问题。 我需要更新什么?

1 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

^(?:tel)(?::\s*)?\+(?:(E)?|\d)(?(1)\d{4}49\d+|\d+)

DEMO

详细了解正则表达式here中的条件。

<强>解释

(?(1)\d{4}49\d+|\d+)

仅当第一部分存在时才使用第一部分\d{4}49\d+中的正则表达匹配字符,否则使用第二部分\d+中的正则表达式匹配所有数字。