Regex emacs正则表达式:捕获引号内的文本,并进行转义

Regex emacs正则表达式:捕获引号内的文本,并进行转义,regex,emacs,Regex,Emacs,我使用此正则表达式捕获引号之间的文本: \"\\(.*?\\)\" 如何使其支持使用\?进行转义这里有一个正则表达式可以完成这项工作: "\(\\[\\"]\|[^\\"]\)*" 它匹配引号,引号或反斜杠前面有反斜杠的任何数字,或引号或反斜杠以外的任何字符 你的问题并没有明确指出反斜杠也应该是可以避免的,但对我来说,这似乎是一个合理的假设。如果这不正确,只需将[\\]替换为单引号即可 请注意,如果要将此表达式放入字符串中,例如在Lisp代码中使用它,则需要在每个引号之前插入反斜杠,然后将所

我使用此正则表达式捕获引号之间的文本:

\"\\(.*?\\)\"

如何使其支持使用\?

进行转义这里有一个正则表达式可以完成这项工作:

"\(\\[\\"]\|[^\\"]\)*"
它匹配引号,引号或反斜杠前面有反斜杠的任何数字,或引号或反斜杠以外的任何字符

你的问题并没有明确指出反斜杠也应该是可以避免的,但对我来说,这似乎是一个合理的假设。如果这不正确,只需将[\\]替换为单引号即可

请注意,如果要将此表达式放入字符串中,例如在Lisp代码中使用它,则需要在每个引号之前插入反斜杠,然后将所有其他反斜杠加倍:

(setq my-quoted-string-regexp "\"\\(\\\\[\\\\\"]\\|[^\\\\\"]\\)*\"")

这里有一个正则表达式可以完成这项工作:

"\(\\[\\"]\|[^\\"]\)*"
它匹配引号,引号或反斜杠前面有反斜杠的任何数字,或引号或反斜杠以外的任何字符

你的问题并没有明确指出反斜杠也应该是可以避免的,但对我来说,这似乎是一个合理的假设。如果这不正确,只需将[\\]替换为单引号即可

请注意,如果要将此表达式放入字符串中,例如在Lisp代码中使用它,则需要在每个引号之前插入反斜杠,然后将所有其他反斜杠加倍:

(setq my-quoted-string-regexp "\"\\(\\\\[\\\\\"]\\|[^\\\\\"]\\)*\"")

在Perl中,针对emacs进行调整。这是做这件事最快的正则表达式。。。 ' ?: [^\\]+ | \\. * ' 扩大

或“[^\]+\\.*”扩大

或“[^\]+\\.*”

如果emacs逃脱了捕获组,并且引用了dbl,并且没有非捕获GRP,则必须进行调整

等效细分:

"                   # literal "
(                   # capture group 1
   (                   # capture group 2 (non-capture context)
       [^"\\]+            # Greedy captue of NOT " nor \ , 1 or more times
     |                       # OR ..
       \\.                # Any character preceded by a \  , 1 time
   )*                  # end group 2 , done 0 or more times
)                  # end group 1
"                  # literal "

在Perl中,针对emacs进行调整。这是做这件事最快的正则表达式。。。 ' ?: [^\\]+ | \\. * ' 扩大

或“[^\]+\\.*”扩大

或“[^\]+\\.*”

如果emacs逃脱了捕获组,并且引用了dbl,并且没有非捕获GRP,则必须进行调整

等效细分:

"                   # literal "
(                   # capture group 1
   (                   # capture group 2 (non-capture context)
       [^"\\]+            # Greedy captue of NOT " nor \ , 1 or more times
     |                       # OR ..
       \\.                # Any character preceded by a \  , 1 time
   )*                  # end group 2 , done 0 or more times
)                  # end group 1
"                  # literal "

如果您使用的是Emacs,那么使用Emacs特定的工具来处理正则表达式是非常有用的。具体来说,我建议使用re builder以交互方式构建表达式

但是,即使是那些表达也变得相当单纯;如果没有sln为Perl表达式提供的优秀文档,在几天或几周内很难看到它们,也很难理解它们的含义

我倾向于使用rx宏在Emacs中构建我的所有regexp,它提供了更可读的代码,我认为这可能会引起争论。在您的情况下,表达式类似于:

rx\组0+或1+无任何\\\seq\\any\

如果在Emacs中计算此表达式,它将生成:

\\\\\?:[^\\]+\\\\\\\\\\?:\\|\\\\*\\\


这本身就很难理解。这实际上是sln提供的同一个表达式,但它被转义为与Emacs一起使用。

如果您使用的是Emacs,则使用Emacs特定的工具来处理正则表达式非常有用。具体来说,我建议使用re builder以交互方式构建表达式

但是,即使是那些表达也变得相当单纯;如果没有sln为Perl表达式提供的优秀文档,在几天或几周内很难看到它们,也很难理解它们的含义

我倾向于使用rx宏在Emacs中构建我的所有regexp,它提供了更可读的代码,我认为这可能会引起争论。在您的情况下,表达式类似于:

rx\组0+或1+无任何\\\seq\\any\

如果在Emacs中计算此表达式,它将生成:

\\\\\?:[^\\]+\\\\\\\\\\?:\\|\\\\*\\\


这本身就很难理解。这实际上与sln上面提供的表达式相同,但它是为了与Emacs一起使用而转义的。

任何不允许“转义+任何内容”的内容都可能不是一个好主意。任何不允许“转义+任何内容”的内容都可能不是一个好主意。