这样的事情:
http://perl.plover.com/yak/regex/samples/slide083.html
换句话说,我想在{ { foo } { bar} }
上成功匹配,但不想在{ { foo }
上匹配。
我认为perl可能是and in .NET。是否可以在emacs正则表达式?
答案 0 :(得分:7)
不,到目前为止,Perl / PCRE和.NET是唯一支持任意嵌套(递归模式)的正则表达式。
答案 1 :(得分:2)
不,但是如果你有一个特定的用例来讨论你,你会经常发现你不需要正则表达式。在lisp中编写简单的状态机来匹配父对象很简单。看看Paredit的来源是一个很好的起点。
答案 2 :(得分:1)
如果您仍有兴趣,请查看cexp.el。
这只是一个黑客,但可能符合你的目的。
您可以使用cexp-search-forward
搜索合并的常规和平衡表达式。
内置re-search-forward
用于正则表达式,因此其语法规则适用。平衡表达式可以与其他语法元素\!(
和\!)
匹配。
最严重的限制是平衡表达可能不会出现在群组中。因此,像\!(^{ \(\!(^{.*}$\!)\)+ }$\!)
这样的构造不起作用,因为该组包含内部平衡表达式。
然而,一个有用的例子是匹配像
这样的TeX定义\def\mdo#1{{\def\next{\relax}\def\tmp{#1}\ifx\next\tmp\else\def\next{#1\mdo}\expandafter}\next}
使用像
这样的组合表达式\\def\\[[:alpha:]]+\(#[0-9]\)*\!(^{.*}$\!)
使用上述cexp通过cexp-search-forward进行搜索会返回以下组的限制:
\def\mdo#1
#1
{{\def\next{\relax}\def\tmp{#1}\ifx\next\tmp\else\def\next{#1\mdo}\expandafter}\next}