有什么方法可以将以下 Backus-Naur 形式 (BNF) 语法转换为 .Net 正则表达式?(我并没有坚持 BNF,但我认为这可能是解释我正在尝试做的事情的最佳方式)。
<field> ::= "<<" <fieldname> <options> ">>"
<options> ::= "" | "(" <option> ")"
<option> ::= "" |
<option> <non-paren> |
<option> <escaped-character>
<escaped-character> ::= "\\" | "\)"
<non-paren> ::= any character but paren
<fieldname> ::= any string that doesn't contain "(" or ">>"
我很接近,但我不知道如何处理转义\
和)
. 这将捕获命名组中的fieldname
and :option
<<(?<fieldname>.\*?)(\((?<option>.*?)\))?>>
编辑
事实证明,我对 BNF 语法的理解比我想象的要生疏。
我试图得到的是括号是特殊字符。在“选项”部分中,它们必须用斜杠转义。(并且斜线也必须被转义)。