閱讀: 233 評論: 1 作者: 戲水 發表于 2009-12-10 15:46 原文鏈接
由于想在公司開一個關于正則表達式的小講座,所以在群里征集大家的實際工作中的問題。有位同學很可愛,報告了一個需求, 如下:
CREATE TABLE cdb_adminactions (
admingid smallint(6) unsigned NOT NULL DEFAULT '0',
disabledactions text NOT NULL,
PRIMARY KEY (admingid)
) TYPE=MyISAM;
如果 CREATE TABLE 語句中包含 類型為 text 的字段 ,那么需要生成對應的 ALTER TABLE 語句如下 (只用一條正則表達式,也就是說只用一次替換,不要分步進行或者使用循環)
ALTER TABLE cdb_adminactions change disabledactions disabledactions text NOT NULL;
好吧,我們來看看怎么用正則表達式來匹配并替換生成這些 ALTER TABLE 語句。經過一番測試,最終
匹配文本的表達式確定為 :
CREATE TABLE(?<=^CREATE TABLE) (\w+) \(.* (\w+) (?=text NOT NULL)text NOT NULL.*\) type=myisam;
替換表達式確定為:
ALTER TABLE $1 change $2 $2 text NOT NULL;
效果如下:
對應的c#代碼如下:
string resultString = null;
string subjectString= null; //把subjectString 賦值為從 .sql 文件中讀入的文本。
try {
resultString = Regex.Replace(subjectString, @"CREATE TABLE(?<=^CREATE TABLE) (\w+) \(.* (\w+) (?=text NOT NULL)text NOT NULL.*\) type=myisam;", "ALTER TABLE $1 change $2 $2 text NOT NULL;", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
備注:這里用到了正則表達式中成為 環視(也叫 預查 或 零寬斷言),算是正則表達式中比較高級的東東,有興趣的可以Google一下。 本例在倉促下寫就,可能有疏漏,記之備查。同學們誰有更好的寫法 不妨交流一下。
推薦鏈接:Windows 7專題發布
網站導航:博客園首頁 個人主頁 新聞 社區 博問 閃存 知識庫
文章來源:http://www.cnblogs.com/zjneter/archive/2009/12/10/1621153.html