Regex 捕获多个文本。

Regex 捕获多个文本。,regex,qregexp,Regex,Qregexp,我对正则表达式有问题 假设我们有一根绳子 S= "[sometext1],[sometext],[sometext]....,[sometext]" “SomeText”的数量未知,它是用户的输入,可以从1到…不等,例如,1000 [sometext]是一些字符序列,但每个字符都不是“,”,因此,我们可以说[^,] 我想通过一些正则表达式捕获文本,然后循环遍历文本 QRegExp p=new QRegExp("???"); p.exactMatch(S); for(int i=1;i<

我对正则表达式有问题

假设我们有一根绳子

 S= "[sometext1],[sometext],[sometext]....,[sometext]"
“SomeText”的数量未知,它是用户的输入,可以从1到…不等,例如,1000

[sometext]是一些字符序列,但每个字符都不是“,”,因此,我们可以说[^,]

我想通过一些正则表达式捕获文本,然后循环遍历文本

QRegExp p=new QRegExp("???");
p.exactMatch(S);
for(int i=1;i<=p.captureCount;i++)
{
  SomeFunction(p.cap(i));
}
所以,我不知道写什么来代替任意n的“?”。 我使用的是Qt4.7,我在课堂参考页面上找不到如何做到这一点。

我知道我们可以在不使用regexp的情况下通过循环完成,或者在循环中生成regex本身,但是这些解决方案不适合我,因为实际问题比这更复杂。

我们可以做到这一点,您可以使用非捕获来挂接逗号,然后请求许多块:

尝试:

文档中解释了不捕获:


请注意,我还将
括起来,因为它在RegExp中有意义,而且您似乎希望它是一个文字句点。

我只知道.Net允许您使用单个
指定可变数量的捕获 表情。示例-(捕获。*me)+
它创建了一个可以覆盖的捕获对象。即使如此,它也只模拟
其他正则表达式引擎提供的功能

大多数引擎都提供增量匹配,直到一个引擎中没有剩余匹配为止
global
标志告诉引擎从最后一个
比赛圆满结束

示例(Perl):


while($string=~/([^,]+)/g){print$1,“\n”}

与所需内容匹配的可能正则表达式是:

([^,]+?)(,|$)
这将匹配以“,”或行尾结尾的字符串。我不确定最后一个元素是否会昏迷

在C#中使用此正则表达式的示例:

此代码将以下内容打印到屏幕:

[sometext1]
[sometext2]
[sometext3]
[sometext4]
以我在网上找到的QRegex为例,试图找到一个更接近您所寻找的解决方案: (我发现的例子是:)


我希望这能有所帮助。

regex无法创建无限数量的捕获组……这不起作用。它将捕获第一个“sometext”,然后将捕获第二个文本,但不再是:)是的,您已经在循环中运行了cap()。忘了那个怪癖-(手册对此进行了更好的解释:是的,可能我会使用这个,谢谢。这会使我的代码更长,因为给定表达式的后缀和前缀类型相同,但分隔符不同。我希望可以用一个正则表达式来表达这一切:)奇怪的是,任何当前版本的正则表达式都不支持这一点。我认为这对他们的开发者来说可能是一个不错的方式:)
([^,]+?)(,|$)
String textFromFile = "[sometext1],[sometext2],[sometext3],[sometext4]";

foreach (Match match in Regex.Matches(textFromFile, "([^,]+?)(,|$)"))
{
    String placeHolder = match.Groups[1].Value;

    System.Console.WriteLine(placeHolder);
}
[sometext1]
[sometext2]
[sometext3]
[sometext4]
QRegExp rx( "([^,]+?)(,|$)");
rx.setMinimal( TRUE ); // this is if the Qregex does not understand the +? non-greedy notation.

int pos = 0;
while ( (pos = rx.search(text, pos)) != -1 ) 
{
     someFunction(rx.cap(1));
}