![](/img/trans.png)
[英]How can I use sed/awk/perl to replace a matched pattern with an equivalent number of dashes?
[英]How to replace matched pattern in perl
我正在嘗試編寫一個接受輸入模式的Perl程序,並打印帶有括號的匹配部分的字符串。 例如,如果我輸入正則表達式“ .p”且字符串為“ developing”,則應打印“ devel(op)ing”
這是我的程序:
if (/($pattern)/) {
$_ =~ s/$1/($1)/;
print;
} else {
print "no match\n";
}
運行它時,出現錯誤消息:
在串聯(。)或q1.pl第12行<>第1行的字符串中使用未初始化的值$ 1。
返回字符串“ devel()ing”。 我做了一些研究,似乎$ 1未初始化,因為字符串不匹配,但是在我的情況下,應該始終初始化$ 1,因為我用“ if ... else ...”進行了檢查。
匹配之后, $1
包含字符串op
。
替換項比對op
匹配,但是搜索部分沒有括號,因此$1
被清除,沒有任何東西可以替代op
。
添加括號以再次創建捕獲組:
s/($1)/($1)/;
替換項中的$1
包含匹配中的第一個捕獲組,但是正則表達式中沒有捕獲組。 您可以使用$&
來獲取正則表達式匹配的所有內容。
s/$1/($&)/;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.