Regex 将字符串与前缀和至少一个逗号(,)匹配

Regex 将字符串与前缀和至少一个逗号(,)匹配,regex,Regex,尝试匹配逗号分隔的值列表。 我想检查逗号“,”是否至少出现一次,以及字符串是否包含某个前缀 即 当地电话:123456,国家电话:123456 有效,但: 电话:123456不是因为没有逗号 当前使用 ^(tel_local:)|(tel_national:),+$ 但它与tel_local:123456相匹配,只需尝试一下: ^(\w+: \d+)(?:, (\w+: \d+))*$ 要完全按照您的要求执行,请使用: ^tel_(?:local|national):(?=.*?,) 首先

尝试匹配逗号分隔的值列表。 我想检查逗号“,”是否至少出现一次,以及字符串是否包含某个前缀

即 当地电话:123456,国家电话:123456

有效,但: 电话:123456不是因为没有逗号

当前使用

^(tel_local:)|(tel_national:),+$
但它与tel_local:123456相匹配,只需尝试一下:

^(\w+: \d+)(?:, (\w+: \d+))*$
要完全按照您的要求执行,请使用:

^tel_(?:local|national):(?=.*?,)
首先,你的主要问题是交替。想想你是否有一个条件a=B或a=C,Z=5。为了使计算顺序保持正确,括号是必要的,与表达式中的替换?:local | national相同


然后,由于您没有指定在tel_local或tel_national one之后必须出现的内容,因此它将假定一个空格和数字,它需要一个逗号,因此我使用了一个先行断言?,将向前看0+个字符,并检查是否存在,。如果未找到逗号,断言将失败,匹配将结束。

您可以使用此基于前瞻的正则表达式:

^(?=[^,]*,)((?:tel_local|tel_national): *\d+,? *)+$

您需要在正则表达式中包含kleene plus+,以说明某些术语至少应具有一次或多次特征

因此,如果要指定要匹配的字符串,则应至少包含一个逗号,例如,+应该这样做