我有以下字串:
load Add 20 percent
to accommodate
我想去:
load Add 20 percent to accommodate
例如,使用 sublime 中的正則運算式,這很容易通過以下方式完成: 正則運算式:
([a-z])\n\s([a-z])
替換:
$1 $2
但是,在 Perl 中,如果我輸入此命令,(適用于測驗我是否可以在任何情況下匹配模式):
perl -pi.orig -e 's/[a-z]\n. to/TEST/g' file
它不匹配任何東西。
有誰知道為什么 Perl 在這種情況下會有所不同,以及 Perl 命令的正確表述應該是什么?
uj5u.com熱心網友回復:
默認情況下,Perl-p標志會一一讀取輸入行。因此,您不能期望您的正則運算式匹配\n.
相反,您想一次讀取整個輸入。您可以通過使用標志來做到這一點-0777(這在perlrun中有記錄):
perl -0777 -pi.orig -e 's/([a-z])\n\s(to)/$1 $2/' file
uj5u.com熱心網友回復:
只是想幫助和提醒您對 perl 正則運算式的初步建議:
perl -pi.orig -e 's/[a-z]\n. to/TEST/g' file
請注意,在 perl 正則運算式中,[a-z]將僅匹配一個字符,不包括任何空格。然后作為開始,請包括一個重復說明符并包括“吃”空格的能力。還要在替換中保留已識別的(但“吃掉”)“到”,您必須再次將其放入替換字串中,就像最后在下面的示例 perl 程式中一樣:
$str = "load Add 20 percent
to accommodate";
print "before:\n$str\n";
$str =~ s/([ a-z] )\n\s*to/\1 to/;
print "after:\n$str\n";
該程式產生以下輸入:
before:
load Add 20 percent
to accommodate
after:
load Add 20 percent to accommodate
然后看起來如果我很好地理解了你想要做什么,你的正則運算式應該看起來像:
s/([ az] )\n\s*to/\1 to/(請注意 'az' 之前的前導空格)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450435.html
上一篇:curlapi決議
