例如,我有這樣一行:
abc prt[67][2]
我需要以這種方式在這一行中插入反斜杠:
abc prt\[67\]\[2\]
所以基本上,每當[somenumber]檔案的行中發生時,我都需要將其轉換為\[somenumber\]
已經嘗試過這個,但我確定它是錯誤的,因為它不起作用。
$line =~ s{[(\d )}{\\[$1]}g;
誰能幫我這個?
uj5u.com熱心網友回復:
您需要轉義第一個括號并在替換的模式側包含第二個括號:
use warnings;
use strict;
while (my $line = <DATA>) {
$line =~ s{\[(\d )]}{\\[$1\\]}g;
print $line;
}
__DATA__
abc prt[67][2]
foo[0]
印刷:
abc prt\[67\]\[2\]
foo\[0\]
uj5u.com熱心網友回復:
你可以匹配
(?<!\\)\[\d (?=])
模式匹配:
(?<!\\)否定后視,斷言還沒有\直接向左\[比賽[\d匹配 1 個數字(?=])正向前瞻,]直接向右斷言
并替換為反斜杠之間的完全匹配。
正則運算式演示
use strict;
use warnings;
my $line = 'abc prt[67][2]';
$line =~ s/(?<!\\)\[\d (?=])/\\$&\\/g;
print $line
輸出
abc prt\[67\]\[2\]
uj5u.com熱心網友回復:
你可以做:
echo 'abc prt[67][2] [no number]' | perl -lpE 's/(\[)(\d )(\])/\\\1\2\\\3/g'
abc prt\[67\]\[2\] [no number]
只是不要迷失在所有的反斜杠中。
uj5u.com熱心網友回復:
需要補充幾點:
$line =~ s{\[(\d )\]}{\\[$1\\]}g;
# ^ ^^ ^^
值得注意的是,[并]需要在模式中逃脫,因為他們有一個特殊的意義,否則。
您要求轉義[和]包含“數字”。
你有沒有考慮過逃避 all[和]?
$line =~ s{([\[\]])}{\\$1}g;
您是否考慮過轉義所有非單詞字符?
$line =~ s{(\W)}{\\$1}g;
或者
$line = quotemeta($line);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/386005.html
下一篇:正則運算式不匹配字母后跟數字
