[英]perl regular expressions substitue
我是perl的新手,我覺得這個表達有點難以理解
$a =~ s/\'/\'\"\'\"\'/g
有人可以幫我理解這段代碼的作用嗎?
目前尚不清楚哪一部分是問題。 這里簡要提一下每一個。
表達式$str =~ s/pattern/replacement/
是一個正則表達式 ,用“替換”替換了由“pattern”匹配的字符串$str
的一部分。 最后用/g
對字符串中的“模式”的所有實例都這樣做。 遠遠不止於此 - 請參閱教程 , 快速 入門 , 參考資料以及perlre和perlop中的完整信息。
某些字符具有特殊含義,特別是在“模式”中使用時。 一個常見的集合是.^$*+?()[{\\|
,但這取決於正則表達式的味道 。 此外,任何用作分隔符(通常為/
)的東西也必須被轉義。 請參閱文檔,例如本文 。 如果要在字符串中使用這些字符中的任何一個作為文字字符,則必須使用反斜杠對其進行轉義 。 (另請參閱轉義序列 。)在您的示例中, '
被轉義,用作替換的字符也是如此。
事實上,這些實際上並不需要被轉義。 這樣可行
use strict;
use warnings;
my $str = "a'b'c";
$str =~ s/'/'"'/g;
print "$str\n";
它打印出所需a'"'b'"'c
。 請注意,你仍然可以逃避它們,它會工作。 '
確實非常特殊的一種情況是在一個單行中 ,它將整個代碼分隔為通過shell提交給Perl,以便運行。 (但是,僅僅逃避它就不起作用了。)總而言之,你所表達的表達式就像Jens的回答一樣,但是有一個不需要的扭曲。
關於相關功能的注釋:您幾乎可以使用任何分隔符,而不僅僅是/
。 所以這個|patt|repl|
很好,甚至這是: {patt}{repl}
(除非它們在里面使用)。 這有時非常方便,可以提高可讀性。 首先,你不必在正則表達式中逃避/
本身。
希望這會有幫助。
所有的\\
都是無用的(但無害),所以它相當於s/'/'"'"'/g
。 它取代了字符串中的每個'
with '"'"'
。
這通常用於shell引用。 請參閱https://stackoverflow.com/a/24869016/17389
這個代碼的和平取代每個單引號與'"'"'
可以通過刪除不必要的反斜杠來簡化$ a = ~s /'/“'”'/ g
每一個'我們都會用''''代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.