我需要一个正则表达式来选择两个外括号之间的所有文本.
例: some text(text here(possible text)text(possible text(more text)))end text
结果: (text here(possible text)text(possible text(more text)))
是否可以编写与未出现次数的嵌套模式匹配的正则表达式?例如,当外括号内嵌有未知数量的打开/关闭括号时,正则表达式是否可以匹配开括号和右括号?
例如:
public MyMethod()
{
if (test)
{
// More { }
}
// More { }
} // End
Run Code Online (Sandbox Code Playgroud)
应该匹配:
{
if (test)
{
// More { }
}
// More { }
}
Run Code Online (Sandbox Code Playgroud) 我知道.net中有关于正则表达式递归的几个问题.我可以写一些复杂的正则表达式,但这个递归超出了我,我只是无法写它.
这是最接近我想要的问题.
但它匹配整个字符串,我希望集合中的匹配最好是最里面的匹配,或者按照某种顺序.它还匹配一个开头字符和一个结束字符.我打开和关闭是2个字符,[!和!]
我的输入字符串将是这样的.
[!a='test' b='[!a='innertest' b='innervalue'!]'!]
Run Code Online (Sandbox Code Playgroud)
我需要首先找到最不合适的部分,[!a='innertest' b='innervalue'!],然后通过我的一个表达树来评估它.然后评估包含它的父级.
有人能帮忙吗?
我真的很喜欢perl的Regexp :: Grammars模块..NET有这样的东西吗?
我真的想在C#中以正则表达式的方式使用递归下降解析器(例如,通过大文档搜索匹配的模式),并且能够递归地表达该模式.
更新从brian d foy 读取这个小宝石之后,我发现perl 5.10支持使用(?和NAME)标记的子模式.PCRE现在有一个Nuget包,PCRE支持命名/标记的子模式.