-2

Regex.Replace メソッドを使用したいのですが、非常に長い文字列で "new long?((long)") 式を検索し、次の変更を行います。

前:

OracleParameter[] array = new OracleParameter[]
{
    new OracleParameter("p_op_adi", OracleDbType.Varchar2, p_op_adi, ParameterDirection.Input),
    new OracleParameter("p_tip_no", OracleDbType.Int64, p_tip_no, ParameterDirection.Input),
    new OracleParameter("p_islem", OracleDbType.Varchar2, p_islem, ParameterDirection.Input),
    new OracleParameter("p_raise", OracleDbType.Varchar2, p_raise, ParameterDirection.Input),
    new OracleParameter("p_durum", OracleDbType.Int64, null, ParameterDirection.Output),
    new OracleParameter("p_mesaj", OracleDbType.Varchar2, 4000, null, ParameterDirection.Output)
};
sMan.ExecuteSP("FRM_USER.user_yetki_kontrol_islem", array);
p_durum = ((array[4].Value != System.DBNull.Value) ? new long?((long)array[4].Value) : null);
p_mesaj = array[5].Value.ToString();

正規表現の後:

OracleParameter[] array = new OracleParameter[]
{
    new OracleParameter("p_op_adi", OracleDbType.Varchar2, p_op_adi, ParameterDirection.Input),
    new OracleParameter("p_tip_no", OracleDbType.Int64, p_tip_no, ParameterDirection.Input),
    new OracleParameter("p_islem", OracleDbType.Varchar2, p_islem, ParameterDirection.Input),
    new OracleParameter("p_raise", OracleDbType.Varchar2, p_raise, ParameterDirection.Input),
    new OracleParameter("p_durum", OracleDbType.Int64, null, ParameterDirection.Output),
    new OracleParameter("p_mesaj", OracleDbType.Varchar2, 4000, null, ParameterDirection.Output)
};
sMan.ExecuteSP("FRM_USER.user_yetki_kontrol_islem", array);
p_durum = abcde(array[4].Value);
p_mesaj = array[5].Value.ToString();

配列インデックス番号 4 をキャッチする必要があることに注意してください。

4

2 に答える 2

1

このコードはあなたが望むことを正確に行うべきです:

class Program
{
    static void Main(string[] args)
    {
        string input = @"OracleParameter[] array = new OracleParameter[]
            {
                new OracleParameter('p_op_adi', OracleDbType.Varchar2, p_op_adi, ParameterDirection.Input),
                p_durum = ((array[4].Value != System.DBNull.Value) ? new long?((long)array[4].Value) : null);
                p_durum = ((array[4].Value != System.DBNull.Value) ? new long?((long)array[4].Value) : null);
            ";

        string pattern = @"^(?<varname>[^=]*)=.*new long\?\(\(long\)(?<arrayval>[^)]*).*?$";
        string replacement = "${varname} = abcde(${arrayval});";

        string output = Regex.Replace(input, pattern, replacement, RegexOptions.Multiline);
        Console.WriteLine(output);
        Console.ReadKey();
    }
}

変数名と配列値を取得し、これらを置換部分の置換として使用します。

于 2012-08-10T14:58:11.600 に答える
0

この正規表現は完全な文字列を選択します(?m)^.*?new long\?\(\(long\).*?$

string res = Regex.Replace(input, @"(?m)^.*?new long\?\(\(long\).*?$", "p_durum = abcde(array[4].Value);");
于 2012-08-10T14:44:26.650 に答える