0

小さな問題があります。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)

ご協力ありがとう御座います。

4

1 に答える 1

1

@コード内のをsiu削除しiu、最後のの後にを削除します@。PHPではこれらの修飾子が必要ですが、C#ではRegexOptions必要に応じていくつかを呼び出します。

于 2012-08-28T06:45:18.723 に答える