regex - 如何在 perl 正则表达式中跨换行符匹配?

标签 regex perl shell

我正在尝试找出如何使用 perl(来自 shell)匹配换行符。下列的:

(echo a b c d e; echo f g h i j; echo l m n o p) | perl -pe 's/(c.*)/[$1]/'

我明白了:
a b [c d e]
f g h i j
l m n o p

这是我所期望的。但是当我放置一个 /s在我的正则表达式结束时,我得到了这个:
a b [c d e
]f g h i j
l m n o p

我期望并希望它打印的是:
a b [c d e
f g h i j
l m n o p
]

是我的正则表达式有问题,还是我的 perl 调用标志?

最佳答案

-p逐行循环输入,其中“行”由 $/ 分隔, 输入记录分隔符,默认为换行符。如果您想将所有 STDIN 放入 $_对于匹配,使用 -0777 .

$ echo "a b c d e\nf g h i j\nl m n o p" | perl -pe 's/(c.*)/[$1]/s'
a b [c d e
]f g h i j
l m n o p
$ echo "a b c d e\nf g h i j\nl m n o p" | perl -0777pe 's/(c.*)/[$1]/s'
a b [c d e
f g h i j
l m n o p
]

Command Switches in perlrun有关这两个标志的信息。 -l (dash-ell) 也很有用。

关于regex - 如何在 perl 正则表达式中跨换行符匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13927672/

相关文章:

正则表达式:找到可变的数字序列

javascript - 从可选模式中获取子字符串

regex - perl正则表达式匹配元音和辅音

perl - 为什么 undef 变量在没有定义的情况下变成 {}?

macos - 在 mac 提示符 "Permission denied"上运行脚本

linux - 查找用于搜索可执行程序的路径?

javascript - 字符串 (x,y) 到对象 {x, y}

regex - 在 lua 5.1 中使用 string.gmatch 拆分字符串时包含空匹配

json - 使用 shell 替换特定行后的单词

perl - MongoDB 不同的值