基本的に、複数行のテキストボックスで次のパターンを見つけようとしています:
[p]なんでもかんでもなんでもいい[/p]
1.) パターンはテキスト ボックス内で n 回発生する可能性があり、n 回検出されることも必要です。
2.) [p] と [/p] の間には、空白と改行を含む任意の文字を使用できます (C# では「\r\n」)
3.) [p] と [/p] を含むパターン全体が欲しい
次のコードは、私の望んでいた結果に非常に近いものです。問題は、[p] と [/p] の間に複数の改行が発生する可能性があることです。私は多くの多くのソリューションを試しました。何もうまくいきませんでした。
private void getTextFromTag2(String Tag, String txt)
{
txt = txt.Replace("\r", "");
string re1 = "(\\[";
string re2 = "p";
string re3 = "\\]";
string re4 = ".*"; // Here lies the problem
string re5 = ""; // Left open for a solution => \r\n cann occur n-times
string re6 = "\\[";
string re7 = "\\/";
string re8 = "p";
string re9 = "\\])";
Regex r = new Regex(re1 + re2 + re3 + re4 + re5 + re6 + re7 + re8 + re9, RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection mc = r.Matches(txt, 0);
foreach (Match match in mc)
{
String c1 = match.Groups[1].ToString();
Console.Write(c1 + "\r\n");
}
}
ご覧のとおり、.NET の RegEx エンジンは改行文字として "\n" のみを必要とするように思われるため、txt で "\r" を "" に置き換えました。
私のコードの問題は、re4 と re5 にあると思います。re4 は、改行がない限り、任意の文字を検出し、適切に機能します。
re4 は「空白と \n を含む任意の文字」と言うべきだと思います。しかし、私は本当にそれを理解していません。
繰り返しになりますが、パターンがテキストボックスで何度も発生する場合でも、エバーティングは正常に機能します。問題は、[p] と [/p] の間に改行が発生した場合です。
これはうまくいかない例です
[p]BlaBla BlaBla \r\n
BlaBla BlaBla \r\n
\r\n
BlaBla
[/p]
これは動作する例です
[p]BlaBla BlaBla[/p]
\r\n
\r\n
[p]Even more BlaBla[/p]
\r\n
\r\n
[p]Much more BlaBla[/p]
私の英語を許してください。私は英語のネイティブスピーカーではありません。
ありがとうございました。
これはコードで、今は私のために働いています。変更されたものは //Changed Tagged です
private void getTextFromTag2(String Tag, String txt)
{
//txt = txt.Replace("\r", ""); //Changed
string re1 = "(\\[";
string re2 = "p";
string re3 = "\\]";
string re4 = ".*";
string re5 = "?"; // Changed
string re6 = "\\[";
string re7 = "\\/";
string re8 = "p";
string re9 = "\\])";
Regex r = new Regex(re1 + re2 + re3 + re4 + re5 + re6 + re7 + re8 + re9, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); //Changed
MatchCollection mc = r.Matches(txt, 0);
foreach (Match match in mc)
{
String c1 = match.Groups[1].ToString();
Console.Write(c1 + "\r\n");
}
}
どうもありがとう。