2

正規表現に問題があります。

文字列があると考えてください

 S= "[sometext1],[sometext],[sometext]....,[sometext]"

「sometexts」の数は不明であり、ユーザーの入力であり、1から..たとえば1000まで変化する可能性があります。

[sometext]は文字のシーケンスですが、それぞれが "、"ではないため、[^、]と言うことができます。

正規表現でテキストをキャプチャしてから、テキストを繰り返し処理したいと思います。

QRegExp p=new QRegExp("???");
p.exactMatch(S);
for(int i=1;i<=p.captureCount;i++)
{
  SomeFunction(p.cap(i));
}

たとえば、一部のテキストの数が3の場合、次のように使用できます。

([^,]*),([^,]*),([^,]*).

So,i don't know what to write instead of "???" for any arbitrary n. I'm using Qt 4.7,I didn't find how to do this on the class reference page.
I know we can do it through the cycles without regexps or to generate the regex itself in cycle,but these solutions don't fit me because the actual problem is a bit more complex than this..

4

3 に答える 3

3

必要なものに一致する可能性のある正規表現は次のとおりです。

([^,]+?)(,|$)

これは、コマ「、」または行の終わりで終わる文字列と一致します。最後の要素に昏睡状態があるかどうかはわかりませんでした。

C#でこの正規表現を使用する例:

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]

ここで私がオンラインで見つけたQRegexの例を使用して、あなたが探しているものに近い解決策を試みます:(私が見つけた例は次の場所にありました:http://doc.qt.nokia.com/qq/qq01-seriously-weird- qregexp.html

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

これがお役に立てば幸いです。

于 2011-07-28T22:31:34.813 に答える
0

私が知っているのは、単一の
式で可変数のキャプチャを指定できる .Net だけです。例 - (capture.*me)+
イテレートできるキャプチャ オブジェクトを作成します。それでも、
他のすべての正規表現エンジンが提供するものをシミュレートするだけです。


ほとんどのエンジンは、ループ内で一致がなくなるまで増分一致を提供します。このglobalフラグは、最後に成功した一致が中断されたところから一致を続けるようにエンジンに指示
します。

例 (Perl):

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

于 2011-07-28T21:50:37.983 に答える
0

非キャプチャを使用してコンマをフックし、ブロックの多くを要求できます。

試す:

QRexExp p=new QRegExp("([^,]*)(?:,([^,]*))*[.]")

非キャプチャについてはドキュメントで説明されています: http://doc.qt.nokia.com/latest/qregexp.html

.RegExp では意味があり、文字通りのピリオドにしたいようだったので、括弧も付けたことに注意してください。

于 2011-07-28T21:29:28.937 に答える