regex - 需要修复 perl 正则表达式以处理多种情况
问题描述
我正在尝试使用正则表达式处理某些字符串情况:
(.*note(?:'|")?\s*=>\s*)("|')?(.*?)\2(.*)
字符串:
- note => "注意在这里",
- note => '注意在这里',
- 注意 => $注意,
- 注意 => "$note",
- 注意 => '$note',
- 注意 => '$note'
- 注意 => $note 。$note2 (可以更长,认为它是 perl 哈希的键值)
- # 笔记 => '$note',
开始/结束/中间可以有多个空格。我需要捕获"
(或'
)、$note
或,
note_section 之后剩下的任何内容。如果此行是注释,则可以#
在开头,因此,我已将其包含.*
在开头。
鉴于正则表达式在案例 3 中失败,因为它\2
为空。
编辑:
要求是我正在读取一个文件,并用一些标签 say 替换 note 的值NOTETAG
,并且周围的所有其他内容保持不变,包括引号和空格。为了那个原因,
- 我们需要从一开始就捕获所有内容,直到我们开始写入值
- 我们也应该捕获引号,这样我就可以准确地写回来
- 我们需要捕捉笔记的价值
- 我们也应该在 note 值之后捕获东西。
例如note => "kamal" ,
会变成note => "NOTETAG" ,
(注意我们上次没有吃过,
)
解决方案
s{
\b
note
\s*
=>
\s*
\K
(?: (.*)
| '[^']*'
| "[^"]*"
)
}{
defined($1)
? $1 =~ s{\$note\b}{"NOTETAG"}gr
: '"NOTETAG"'
}exg;
推荐阅读
- visual-studio-code - 在 VSCode 中移动火车
- c - 是否可以反序列化 .ser 文件并将该数据用作 C 中的输入?
- javascript - Angular Slider - 'value' does not exist on type 'HTMLElement'
- html - how to force input[type=range] to the right css
- python - unable to carry over Class value under While loop for Python blackjack game
- python - Installing python library "firedrake"
- mysql - How composite index and left join work in MySql?
- python - Django - Only some static images not showing up on web page after deployment
- java - Memory optimization for returning large S3 files from Spring Controller
- python - Cannot locate a static file. I get an error that 'STATIC_ROOT' is not set