-1

私の正規表現コードは機能しません。以下のような結果が得られます。任意のアイデア

私のコードのエラー:

Getting the sentences without values like this one: CREATE SEQUENCE "" MINVALUE  MAXVALUE INCREMENT BY START WITH  CACHE  NOORDER NOCYCLE;

文言変更の条件

  1. MINVALUE の文中にプラスの値がある場合は、MINVALUE と同じ値で開始します...
  2. MINVALUE の文中に負の値がある場合は、MAXVALUE と同じ値で開始する

データベース内には、変更が必要な 3 つの文があります...

CREATE SEQUENCE "MY_SEQUENCE" MINVALUE -8 MAXVALUE 999 INCREMENT BY 1 START WITH 250  CACHE 50 NOORDER NOCYCLE;

CREATE SEQUENCE "_SEQUENCE" MINVALUE 151 MAXVALUE 500 INCREMENT BY 4 START WITH 160  CACHE 30 NOORDER NOCYCLE;

結果は以下のようになります

CREATE SEQUENCE "MY_SEQUENCE" MINVALUE -8 MAXVALUE 999 INCREMENT BY 1 START WITH 999 CACHE 50 NOORDER NOCYCLE;

CREATE SEQUENCE "_SEQUENCE" MINVALUE 151 MAXVALUE 500 INCREMENT BY 4 START WITH 151 CACHE 30 NOORDER NOCYCLE;    

私のコード:

            string sentence = "";
            string formatprototype = "";
            string output = "";

                using (OracleConnection conn1 = MyConnection.GetSourceConnection())
                {
                    conn1.Open();
                    using (OracleCommand crtCommand = new OracleCommand(@"MyCommand", conn1))
                    {
                        sentence = crtCommand.ExecuteScalar().ToString();
                        string pattern = @".*[ ]+?[\""]{1}(?<String>[a-zA-Z0-9_]*)[\""]{1}[ ]+?MINVALUE[ ]*(?<MinValue>[-?\d]*)[ ]*MAXVALUE[ ]*(?<MaxValue>[\d]*)[ ]+?[INCREMENT]*[ ]+?[BY]*[ ]+?(?<IncrementBy>[\d]*)[ ]+?[START]*[ ]+?[WITH]*[ ]+?(?<StartWith>[\d]*)[ ]+?[CACHE]*[ ]+?(?<Cache>[\d]*)\s+?";
                        Regex regex = new Regex(pattern);
                        Match match = regex.Match(sentence);
                        Group @string = match.Groups[1];
                        Group minvalue = match.Groups[2];
                        Group maxvalue = match.Groups[3];
                        Group incrementby = match.Groups[4];
                        Group startswith = match.Groups[5];
                        Group cache = match.Groups[6];
                        formatprototype = @"CREATE SEQUENCE ""{0}"" MINVALUE {1} MAXVALUE {2} INCREMENT BY {3} START WITH {4} CACHE {5} NOORDER NOCYCLE";
                        if (minvalue.Value.StartsWith("-"))
                        {
                            output = string.Format(formatprototype, @string, minvalue, maxvalue, incrementby, maxvalue, cache);
                        }
                        else if (!minvalue.Value.StartsWith("-"))
                        {
                            output = string.Format(formatprototype, @string, minvalue, maxvalue, incrementby, minvalue, cache);
                        }
                        MessageBox.Show(output);
                    }
                }
            }
4

1 に答える 1