regex - 无法正确获取 perl 多行替换
问题描述
我无法理解多行匹配在 perl 中的工作原理我有一个文件,我想在其中删除以下任何外观:
@keyword{
或者
@keyword
{
在这两种情况下,@ 都是该行的第一个字符。
我可以用两条单独的指令(使用'perl -p0777')来做到这一点:
s/\n\@keyword\{//
s/\n\@keyword\n\{//
但我认为以下内容也可以
s/\n\@keyword\n?\{//
但事实并非如此。它没有抓住第二种情况,我不明白为什么???
有什么解释吗?
解决方案
啊啊啊!刚刚得到它。因为 perl -p0777,整个文件只有一行,表达式在整个文件上匹配一次,所以每个语句只匹配一个模式。解决方案是将'g'放在最后:
s/\n\@keyword\n?\{//g
但现在又一个。
我一开始没有 -0777 选项,我认为
s/^\@keyword\n?\{//m
会工作。但它再次没有捕捉到第二种情况(两行模式)。你能解释一下为什么吗?
推荐阅读
- html - 如何划分有序列表并在编号项目上方包含图像
- vb.net - 在 RichTextbox 中搜索一个单词并在 VB.NET 中设置它的前景色
- sql-server - 一旦我们更新表中的电子邮件列,SQL Server 就会自动发送邮件
- google-drive-api - 使用与同事共享的 Google Drive 视频进行分析
- bootstrap-4 - 如何使导航栏品牌形象具有响应性并适合导航栏
- vim - 在 UltiSnips 片段中使用空格
- web-scraping - 使用 javascript 分页抓取
- sql - GBQ SQL:对于A列中的每个唯一值,如果值'X'出现在B列中......然后创建新的列C,值为'Y',否则为'N'
- java - 获取两个字符之间的字符串(两个引号)
- unity3d - 我现在在 Unity 2017 LTS 上。要升级,我应该直接升级到 2019 LTS 还是应该先升级到 2018 LTS?