2
我想问任何熟练的.net开发人员,如果有可能定义正则表达式(使用.net RegularExpressions
名称空间cpabilities),这将包括对另一个正则表达式(一个或多个)。我想描述语法规则,每个规则都是一个正则表达式。最终的正则表达式将是语法的开始符号。.net System.Text.RegularExpressions在正则表达式中嵌套正则表达式
当然我可以执行单行正则表达式的扩展,但可读性会受到影响。我也不想尝试以编程方式包含在开始符号中的每个选项(如foreach(regexp r in line.regexps) {check if r.matches(input)}
)。
例如具有在正则表达式状以下的ini类文件的语法(不遵循微软的正则表达式规则,只是一般的):
sp = \s*
allowed_char = [a-zA-Z0-9_]
key = <allowed_char>+
value = <allowed_char>((<allowed_char>|[ ])*<allowed_char>)?
comment = (;|(//)|#)(.*)
empty_line = ^<sp>$
line_comment = ^<sp><comment>$
section = ^<sp>\[<sp><value><sp>\]<sp>(<comment>)?$
item = ^<sp><key><sp>=<sp><value><sp>(<comment>)?$
line = <empty_line>|<line_comment>|<section>|<item>
我想:
- 检查如果一个句子是该语言的一部分(true/false) - 看起来微不足道:匹配
<line>
开始符号。 - 访问终端类的符号值(例如
<section>
,<key>
,<value>
,...
) - 我想这可以通过命名匹配组来实现(或者不管它到底是叫 - 仍然在NEDD MSDN读一些细节)。 - 我不指望你写代码,只是如果你能给我一些提示,是否可能(以及如何),因为我还没有找到这个信息。所有示例均用于单个正则表达式匹配。
谢谢。
我明白了,所以你做了扩展,但是在字符串级别使用了替换...如果不可能如何在另一个正则表达式中引用regexps,这可能是解决方案之一。谢谢。 – sharpener
由于没有其他可能性在Regex类中包含子表达式,所以这是唯一的解决方案。 – sharpener