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));
}