相关疑难解决方法(0)

在perl中,替换文本中的反向引用后跟数值文字

我在替换文本中使用后向引用时出现问题,后面跟着文字.我尝试过以下方法:

perl -0pi -e "s/(<tag1>foo<\/tag1>\n\s*<tag2>)[^\n]*(<\/tag2>)/\1${varWithLeadingNumber}\2/" file.xml
perl -0pi -e "s/(<tag1>foo<\/tag1>\n\s*<tag2>)[^\n]*(<\/tag2>)/\g{1}${varWithLeadingNumber}\g{2}/" file.xml
Run Code Online (Sandbox Code Playgroud)

第一个当然会导致问题,因为$ {varWithLeadingNumber}以数字开头,但我认为\g{1}上面第二次尝试中的构造应该可以解决这个问题.我正在使用perl 5.12.4.

regex perl

9
推荐指数
1
解决办法
1万
查看次数

在组引用后添加数字

我有包含两个日期的数据行。我想将第一个日期的格式从mm/dd/yy更改为20yy-mm-dd
由于我只想更改第一个日期,因此我使用perl代替sed,因为sed没有延迟匹配。

以下给出了错误的结果

echo test,10/02/20,test2,11/03/20,test3 | perl -pe 's/(.*?)(..)\/(..)\/(..)(.*)/\120\4-\2-\3\5/'
# P20-10-02,test2,11/03/20,test3
Run Code Online (Sandbox Code Playgroud)

如果我在\1它工作正常后添加一个空格,但我不希望输出中有额外的空间:

echo test,10/02/20,test2,11/03/20,test3 | perl -pe 's/(.*?)(..)\/(..)\/(..)(.*)/\1 20\4-\2-\3\5/'
# test, 2020-10-02,test2,11/03/20,test3
Run Code Online (Sandbox Code Playgroud)

问题似乎是它读取的\120不是 \1 + 20 而是对组 120(不存在)的引用。

regex perl sed

1
推荐指数
1
解决办法
149
查看次数

标签 统计

perl ×2

regex ×2

sed ×1