0

我有一个像这种格式的字符串{Name,Address,(PhoneNumber1)*}(PhoneNumber1)*表示 PhoneNumber 可以出现 0 到无限次。

我想获取, 和所有的文本Name,如果它们出现在文本中。AddressPhoneNumber

例如:

{Name1,Addr1}Name1作为第 1 组返回,Addr1作为第 2 组

{Name1,Addr1,Phone1,Phone2}将作为Name1组 1、组 2、组 3、组4等返回。Addr1Phone1Phone2

4

1 回答 1

0

除非多次应用正则表达式本身,否则您将无法捕获重复的电话号码。如果您依赖正则表达式中捕获组的重复,则捕获组将始终匹配最后一个匹配的实例。

我知道处理这个问题的“技巧”是使用交替来捕获初始序列,如下所示:

(?:\A{(\w+),(\w+)|(\w+?)(?:,|}\Z))

如this fiddle所示(我不知道支持c ++的正则表达式小提琴,所以我使用了rubular)。它将匹配一些不符合要求的示例(例如那些不以 a 结尾的示例}),但它应该匹配所有符合要求的示例。

于 2013-08-08T22:58:52.490 回答