regex - 正则表达式 : put $ in [ ]

标签 regex perl

echo "tests"|perl -pe "s/s[t$]//g"
Unmatched [ in regex; marked by <-- HERE in m/s[ <-- HERE 5.020000/ at -e line 1, <> line 1.

我不能把 $ 放在 [ ] 中吗?为什么?是否有任何其他方法来匹配 t$

最佳答案

注意错误消息中的正则表达式(删除标记后):

m/s[5.020000/

这为我们提供了有关正在发生的事情的线索。在评估正则表达式之前,$] 被替换为 5.020000。引用man perlvar ,我们可以看到$]是一个特殊的变量:

The version + patchlevel / 1000 of the Perl interpreter.

为了防止变量扩展,添加一些转义:

echo "tests" | perl -pe 's/t[s\$]//g'

这将删除 ts 或文字 t$。如果您希望 $ 代表行尾(修剪 testtests),请使用:

echo -e "tests\ntest" | perl -pe 's/t(s|$)//g'

或者使 s 可选:

echo -e "tests\ntest" | perl -pe 's/ts?$//g'

关于regex - 正则表达式 : put $ in [ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399332/

相关文章:

javascript - 如何在 Javascript 中增加方括号内的数字

regex - 使用正则表达式批量重命名 *fastq.gz 文件

java - 模式与正则表达式不匹配

javascript - 用正则表达式替换选择索引属性

regex - 在 Google 表格中的列中的所有单元格内的子字符串后求和多个值

Perl:使用正负非整数值快速排序哈希键

perl - 在 Perl 中使用 Mojolicious 对斜杠命令的延迟响应

perl - 在 perl 中,我们如何检测外部命令中的段错误

perl - 从 Jenkin 管道运行脚本时如何通过 ssh 在远程 AIX 机器中加载环境变量?

Perl 脚本突然编译速度非常慢