小さな問題があります。C# で何かを抽出する関数を作成しようとしています (正規表現を PHP から C# に変換する必要があります)。
私は一般的に次のように書きます。
public static class ExtensionMethods
{
public String PregReplace(this String input, string[] pattern, string[] replacements)
{
for (var i = 0; i < pattern.Length; i++)
{
input = Regex.Replace(input, pattern[i], replacements[i]);
}
return input;
}
}
しかし、これらの例 (PHP のコード) には問題があります。
preg_replace('@<head[^>]*?>.*?</head>@siu', ' ', $result);
preg_replace('@</?((frameset)|(frame)|(iframe))@iu', "\n\$0", $result);
しかし、C# でこの正規表現を使用すると、
String[] pattern = new String[2]{"@<head[^>]*?>.*?</head>@siu", "@</?((frameset)|(frame)|(iframe))@iu"};
String[] replace = new String[2]{" ", "\n\$0"};
input.PregReplace(pattern , replace ); //my new function
入力に違いはありません(正規表現をキャッチしません)。私の機能を手伝ってもらえますか?正規表現にエラーがありますか?
編集:コードを次のように変更しました:
String[] pattern = new String[2]{"<head[^>]*?>.*?</head>", "</?((frameset)|(frame)|(iframe))"};
String[] replace = new String[2]{" ", "\n\\$0"};
input = "input = "><head><title>something</title></head><body>sdegsehgaeg<frame>aggsd</frame></";
string s = input.PregReplace(pattern, replace);
答えとして、私は得る
> <body>sdegsehgaeg
\<frame>aggsd
\</frame></
それは
> <body>sdegsehgaeg\n\\<frame>aggsd\n\\</frame></
これは、\n\$0 の文字 \ にすぎません。\n\$0 を \n\$0 に変更すると、エラーが発生します (認識されていないエスケープ シーケンス)
OK、問題は解決しました (\n$0)
ご協力ありがとう御座います。