regex - $和Perl的全局正则表达式修饰符

标签 regex perl

我终于弄清楚了如何在文件的每一行末尾添加文本:

perl -pe 's/$/addthis/' myfile.txt

但是,当我尝试学习Perl以便经常使用正则表达式时,我不知道为什么下面的perl命令将文本“addthis”添加到的末尾并在每行的处开始:
perl -pe 's/$/addthis/g' myfile.txt

我以为'$'匹配行尾,无论正则表达式匹配使用了什么修饰符,但是我想这是错误的吗?

最佳答案

摘要:对于您正在执行的操作,请删除/g,使其仅在换行符之前匹配。 /g告诉它在换行符之前和字符串末尾(在换行符之后)匹配。

如果没有/m修饰符,则$将在换行符之前(如果它出现在字符串的末尾)或字符串的末尾进行匹配。例如,对于"foo""foo\n"$将在foo之后匹配。但是,使用"foo\nbar",它将在bar之后匹配,因为嵌入的换行符不在字符串的末尾。

使用/g修饰符,您将获得$匹配的所有位置-因此

s/$/X/g;

将采用类似于"foo\n"的行并将其转换为"fooX\nX"

侧边栏:/m修饰符将允许$匹配字符串末尾之前出现的换行符,以便
s/$/X/mg;

"foo\nbar\n"转换为"fooX\nbarX\nX"

关于regex - $和Perl的全局正则表达式修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940938/

相关文章:

c - 在 Debian 上构建 DBD Sybase 的问题

php - 什么是 PHP 和 Perl 共享的良好的纯文本配置文件格式?

perl - 如何防止 CGI Perl 中用户 session 的 session 劫持?

python - 可选字符串与正则表达式不匹配

java - 模式搜索如何使速度更快?

sql - 为什么 REGEXP_LIKE 函数将字母 'e' 视为大写而不是小写?

javascript - 如何从字符串中提取可变子字符串

珀尔;如何按值过滤哈希(指定条件)

html - Mojolicious 中的复选框

regex - 如何通过将行旋转为 csv 数据来折叠工作表