ner*_*dis 2 regex emacs perl pcre
RegExps是否有一种语法允许重复先前在同一RexExp中出现的组定义.请注意:我想再次'复制'组定义,我对前一组匹配的反向引用不感兴趣(即"\n"不是我要找的).
例如:我寻找的RegExp将匹配"spamniceggs","eggswithspam","spamlovelyspam","eggeggspam",但既不是"spamwithham"也不是"deliciousegg".
一个可能的PCRE RegExp将是:((?:spam)|(?:egg))\ w*((?: egg)|(?:spam))在这种情况下和类似情况下,避免显式重复会很好相同的组描述(DRY).因此,我正在寻找具有语义的假设运算符"~n",如下所示:应用重新应用与第n个捕获组相同的组描述.因此,示例RegExp可以表示为:(?:( ?: spam)|(?: egg))\ w*~1
有没有办法在这方面取得成果?
没有像这样的设施 您正在询问的正则表达式实现中的任何一个 Emacs,但周围的语言使它变得容易.在Lisp中:
(let* (s "spam")
(e "egg")
(sore (concat "\\(" s "\\|" e "\\)"))
(regex (concat sore "[A-Za-z]*" sore)) )
(... do stuff with regex ...)
Run Code Online (Sandbox Code Playgroud)
在C中,您可以类似地使用例如字符串构建正则表达式sprintf.
编辑:?(DEFINE)在PCRE中被忽略了.我将其留给Emacs /一般案例.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |