目的是什么,仅仅是匹配没什么意义吧,不同的目的写出的正则不一样//如果仅仅是匹配 string test = "[asdf , from df df] from [dfdf from d ]"; Regex reg = new Regex(@"(?i)(?<=(^|\])[^\[\]]*)from(?=[^\[\]]*(\[|$))"); MatchCollection mc = reg.Matches(test); foreach (Match m in mc) { richTextBox2.Text += "匹配成功起始位置:" + m.Index + "\n"; }//如果是替换 string test = "[asdf , from df df] from [dfdf from d ]"; Regex reg = new Regex(@"\][^\[\]]+\["); string result = reg.Replace(test, delegate(Match m) { return m.Value.Replace("from", "随便替换点什么"); }); richTextBox2.Text = result;
string test = "[asdf , from df df] from [dfdf from d ]";
Regex reg = new Regex(@"(?i)(?<=(^|\])[^\[\]]*)from(?=[^\[\]]*(\[|$))");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += "匹配成功起始位置:" + m.Index + "\n";
}//如果是替换
string test = "[asdf , from df df] from [dfdf from d ]";
Regex reg = new Regex(@"\][^\[\]]+\[");
string result = reg.Replace(test, delegate(Match m) { return m.Value.Replace("from", "随便替换点什么"); });
richTextBox2.Text = result;
这是那个传说中的负向零宽断言的么? 我也试了试 没成功。
高手就是不一样,,,, 帅气!谢谢!PS:
目的: 检索sql中的表名,列名, 因为表名可以含有关键字(此时,表名被[]包含)。谢谢两位!