首页 > 解决方案 > 需要修复 perl 正则表达式以处理多种情况

问题描述

我正在尝试使用正则表达式处理某些字符串情况: (.*note(?:'|")?\s*=>\s*)("|')?(.*?)\2(.*)

字符串:

开始/结束/中间可以有多个空格。我需要捕获"(或')、$note,note_section 之后剩下的任何内容。如果此行是注释,则可以#在开头,因此,我已将其包含.*在开头。
鉴于正则表达式在案例 3 中失败,因为它\2为空。

编辑: 要求是我正在读取一个文件,并用一些标签 say 替换 note 的值NOTETAG,并且周围的所有其他内容保持不变,包括引号和空格。为了那个原因,

例如note => "kamal" ,会变成note => "NOTETAG" ,(注意我们上次没有吃过,

标签: regexperl

解决方案


s{
   \b
   note
   \s*
   =>
   \s*
   \K
   (?: (.*)
   |   '[^']*'
   |   "[^"]*"
   )
}{
   defined($1)
   ?  $1 =~ s{\$note\b}{"NOTETAG"}gr
   : '"NOTETAG"'
}exg;

推荐阅读