在正则表达式中捕获重复组

3
我有一个字符串 A_B_C_D_E_F_G,想要用一些正则表达式得到所有的字符串 A、B... 并储存在数组中。我尝试过:
((.*?)_)+

然而,这似乎只存储最后一次重复。是否有一种方法可以在单个正则表达式中获取它们所有的重复,如果没有,我应该使用什么?此外,我正在使用C++进行操作。

使用_+来收集不匹配的块,或者使用[^_]+来收集匹配的块。 - Wiktor Stribiżew
一个重复捕获组只会捕获最后一次迭代。请参阅http://www.regular-expressions.info/captureall.html。 - Jarod42
请参见 https://ideone.com/xZBk63 - Wiktor Stribiżew
1个回答

1

看起来你正在使用std::regex_match

你可以使用std::regex_searchstd::regex_iterator来完成你想要的操作(使用正则表达式([^_]+)


1
顺便说一下,你的 ((.*?)_)+ 无法匹配 A_B_C_D_E_F_G - apple apple
1
有没有办法使用 regex_match 来实现?我想先检查字符串是否是我需要的(即 string_string_string_...),然后只使用一个正则表达式捕获所有子字符串。 - Виталик Бушаев
@ВиталикБушаев 不,没有办法,我也看不出来 std::regex_search([^_]+) 不适合你的需求。 - apple apple
顺便说一句,如果你的“string”代表数字和单词,你可以在“regex_match”中使用“([a-zA-Z0-9]+_?)*”来检查。 - apple apple
谢谢,我不想使用 regex_search,因为那种方法的性能问题。显然,我别无选择。 - Виталик Бушаев
@ВиталикБушаев,我不确定regex_matchregex_search之间会有太大的区别。 - apple apple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接