正则表达式无限递归验证(再问)

zenjj 2010-03-21 01:54:41
这种正则表达式太难,还是要问前辈
http://topic.csdn.net/u/20100320/12/fb0c7ef2-e341-4394-a3ef-ff383ee8fa74.html
昨天问的,但是我想做到是
允许:
115h(1354(214g(fdsf)))
不允许(不允许并排):
115h(1354(214g(fdsf)214g(fdsf)))
且括号里不能为空。
谢谢!
...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2010-03-21
  • 打赏
  • 举报
回复
上面还是漏了一种情况,115h()也被认为合法了

string[] test = { "115h(1354(214g(dkfj(dkjf(xfds(dfs))))))", "115h(1354(214g(fdsf)214g(fdsf)))", "115h(1354(214g(fdsf)))", "115h(1354(214g()))", "115h()" };
Regex reg = new Regex(@"^[^()]+\((?!\))(?>\((?!\))(?<o>)|\)(?![^()]*\()(?<-o>)|[^()]*)*(?(o)(?!))\)$");
foreach (string s in test)
{
if (reg.IsMatch(s))
{
richTextBox2.Text += "源字符串:" + s + " 合法!\n";
}
else
{
richTextBox2.Text += "源字符串:" + s + " 不合法!\n";
}
}
/*---------输出-------
源字符串:115h(1354(214g(dkfj(dkjf(xfds(dfs)))))) 合法!
源字符串:115h(1354(214g(fdsf)214g(fdsf))) 不合法!
源字符串:115h(1354(214g(fdsf))) 合法!
源字符串:115h(1354(214g())) 不合法!
源字符串:115h() 不合法!
*/
zenjj 2010-03-21
  • 打赏
  • 举报
回复
3Q~~~~~~~~~~~~~~
-过客- 2010-03-21
  • 打赏
  • 举报
回复
哦,漏了非空的需求

string[] test = { "115h(1354(214g(dkfj(dkjf(xfds(dfs))))))", "115h(1354(214g(fdsf)214g(fdsf)))", "115h(1354(214g(fdsf)))", "115h(1354(214g()))" };
Regex reg = new Regex(@"^[^()]+\((?>\((?!\))(?<o>)|\)(?![^()]*\()(?<-o>)|[^()]*)*(?(o)(?!))\)$");
foreach (string s in test)
{
if (reg.IsMatch(s))
{
richTextBox2.Text += "源字符串:" + s + " 合法!\n";
}
else
{
richTextBox2.Text += "源字符串:" + s + " 不合法!\n";
}
}
/*---------输出-------
源字符串:115h(1354(214g(dkfj(dkjf(xfds(dfs)))))) 合法!
源字符串:115h(1354(214g(fdsf)214g(fdsf))) 不合法!
源字符串:115h(1354(214g(fdsf))) 合法!
源字符串:115h(1354(214g())) 不合法!
*/
zenjj 2010-03-21
  • 打赏
  • 举报
回复
能不能添加一个不能非空呢?
115h(1354(214g()))还是合法的!
-过客- 2010-03-21
  • 打赏
  • 举报
回复
楼主再找些数据测试一下,有不满足的给出实例

string[] test = { "115h(1354(214g(dkfj(dkjf(xfds(dfs))))))", "115h(1354(214g(fdsf)214g(fdsf)))", "115h(1354(214g(fdsf)))" };
Regex reg = new Regex(@"^[^()]+\((?>\((?<o>)|\)(?![^()]*\()(?<-o>)|[^()]*)*(?(o)(?!))\)$");
foreach (string s in test)
{
if (reg.IsMatch(s))
{
richTextBox2.Text += "源字符串:" + s + " 合法!\n";
}
else
{
richTextBox2.Text += "源字符串:" + s + " 不合法!\n";
}
}
/*---------输出-------
源字符串:115h(1354(214g(dkfj(dkjf(xfds(dfs)))))) 合法!
源字符串:115h(1354(214g(fdsf)214g(fdsf))) 不合法!
源字符串:115h(1354(214g(fdsf))) 合法!
*/

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧