与正则表达式递归匹配

时间:2011-10-10 04:08:26

标签: c# regex recursive-regex

我需要使用以下字符串拆分表达式:

'with', 'select', 'from', 'where'

这些将按照我写的顺序出现。您可以假设每个单词都以单词边界开头和结尾。

我没有遇到任何问题。但是,新的要求已经到来。 from子句可以包含整个表达式。

这意味着,表达式可能是这样的:

with
   something
select
   something more
from
   with
      aaaa
   select
      bbbb      
   from
      [may be another expression]
   where
      the inner expression ends here
where
   the outer expression ends here

我不需要拆分内部表达。

现在的问题是,有没有一种标准的方式来做这样的事情?或者我需要亲自手动完成它?

我不确定它是否重要,我的应用程序是C#。

1 个答案:

答案 0 :(得分:3)

看起来你的用例开始变得足够复杂,你可能最好花时间和重构努力来使用实际的解析实用程序,而不是正则表达式。我不是C#程序员,所以我对你的建议无能为力,但谷歌搜索“C#解析器库”产生了几个看起来很有希望的链接。

如果你只需要一个固定的嵌套级别,那么我认为它在技术上可以用正则表达式来完成,但它会变得很讨厌。可能最简单的方法是为每个固定的嵌套级别编写一个表达式,并从顶部开始匹配它们直到获得命中。丑陋,但可以工作。

如果对顶层表达式中可能包含的嵌套表达式的数量没有限制,那么正则表达式的功能不足以正确执行此操作,并且您需要查看解析实用程序。我不会尝试自己编写解析器;几乎可以肯定的是,可以解决大多数棘手的问题。