我正在研究pl / sql代码,我想替换';'用'〜'评论。
e.g。
如果我的代码为:
--comment 1 with; select id from t_id; --comment 2 with ; select name from t_id; /*comment 3 with ;*/
然后我希望我的结果文本为:
--comment 1 with~ select id from t_id; --comment 2 with ~ select name from t_id; /*comment 3 with ~*/
可以在C#中使用正则表达式完成吗?
答案 0 :(得分:4)
正则表达式:
((?:--|/\*)[^~]*)~(\*/)?
使用它的C#代码:
string code = "all that text of yours";
Regex regex = new Regex(@"((?:--|/\*)[^~]*)~(\*/)?", RegexOptions.Multiline);
result = regex.Replace(code, "$1;$2");
未使用C#进行测试,但正则表达式和替换在RegexBuddy中使用您的文本=)
注意:我不是一个非常出色的正则表达式作家,所以它可能写得更好。但它的确有效。并使用以 - 开头的单行注释处理您的案例 - 以及使用/ * * /
的多行注释编辑:将您的评论读到另一个答案,因此删除了^
锚点,以便它也可以处理不在新行上开始的评论。
编辑2:想象它可以简化一下。还发现它没有结束$锚也能正常工作。
<强>解释强>
// ((?:--|/\*)[^~]*)~(\*/)?
//
// Options: ^ and $ match at line breaks
//
// Match the regular expression below and capture its match into backreference number 1 «((?:--|/\*)[^~]*)»
// Match the regular expression below «(?:--|/\*)»
// Match either the regular expression below (attempting the next alternative only if this one fails) «--»
// Match the characters “--” literally «--»
// Or match regular expression number 2 below (the entire group fails if this one fails to match) «/\*»
// Match the character “/” literally «/»
// Match the character “*” literally «\*»
// Match any character that is NOT a “~” «[^~]*»
// Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the character “~” literally «~»
// Match the regular expression below and capture its match into backreference number 2 «(\*/)?»
// Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
// Match the character “*” literally «\*»
// Match the character “/” literally «/»
答案 1 :(得分:1)
不需要正则表达式 - 您可以迭代行,找到以“ - ”开头的行并替换“;”对他们说“〜”。
String.StartsWith("--")
- 确定String实例的开头是否与指定的字符串匹配。
String.Replace(";", "~")
- 返回一个新字符串,其中此实例中出现的所有指定Unicode字符或字符串都替换为另一个指定的Unicode字符或字符串。