簡體   English   中英

如何在Perl中替換匹配的模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM