1

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

'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# 应用程序。

4

1 回答 1

3

看起来您的用例开始变得足够复杂,您最好投入时间和重构工作以使用实际的解析实用程序,而不是正则表达式。我不是 C# 程序员,所以我无法为您提供太多建议,但是在谷歌上搜索“C# 解析器库”会产生几个看起来很有希望的链接。

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

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

于 2011-10-10T04:26:05.520 回答