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一起使用而转义的。任何不允许“转义+任何内容”的内容都可能不是一个好主意。任何不允许“转义+任何内容”的内容都可能不是一个好主意。