我正在尝试使用正则表达式处理字符串的某些情况:
(.*note(?:'|")?\s*=>\s*)("|')?(.*?)\2(.*)
字符串:
开始/结束/之间可以有多个空格。我需要捕获"
(或'
),$note
,,
或note_section之后剩下的所有内容。如果此行是注释,则开头可以有#
,因此,我在开头包含了.*
。
在情况3中,鉴于正则表达式失败,因为\2
为null。
编辑:
要求是我正在读取文件,并用一些标记为NOTETAG
的标签替换note的值,并且周围的所有其他内容保持不变,包括逗号和空格。为此,
例如note => "kamal" ,
将成为note => "NOTETAG" ,
(请注意,我们从上次开始没有吃过,
)
答案 0 :(得分:3)
s{
\b
note
\s*
=>
\s*
\K
(?: (.*)
| '[^']*'
| "[^"]*"
)
}{
defined($1)
? $1 =~ s{\$note\b}{"NOTETAG"}gr
: '"NOTETAG"'
}exg;
答案 1 :(得分:1)
您可以尝试(note\s*=>\s*(?:"|')?)[^'",]+
说明:
(...)
-捕获组
note
-完全匹配note
\s*
-匹配零个或多个空格
=>
-完全匹配=>
(?:..)
-非捕获组
"|'
-交替:匹配'
或"
?
-匹配前面的模式零或一次
[^'",]+
-否定的字符类-匹配一个或多个除+
,'
,"
作为替代使用\1NOTETAG
,其中\1
表示第一个捕获组