簡體   English   中英

perl正則表達式替代

[英]perl regular expressions substitue

我是perl的新手,我覺得這個表達有點難以理解

$a =~ s/\'/\'\"\'\"\'/g

有人可以幫我理解這段代碼的作用嗎?

目前尚不清楚哪一部分是問題。 這里簡要提一下每一個。

表達式$str =~ s/pattern/replacement/是一個正則表達式 ,用“替換”替換了由“pattern”匹配的字符串$str的一部分。 最后用/g對字符串中的“模式”的所有實例都這樣做。 遠遠不止於此 - 請參閱教程快速 入門參考資料以及perlreperlop中的完整信息。

某些字符具有特殊含義,特別是在“模式”中使用時。 一個常見的集合是.^$*+?()[{\\| ,但這取決於正則表達式的味道 此外,任何用作分隔符(通常為/ )的東西也必須被轉義。 請參閱文檔,例如本文 如果要在字符串中使用這些字符中的任何一個作為文字字符,則必須使用反斜杠對其進行轉義 (另請參閱轉義序列 。)在您的示例中, '被轉義,用作替換的字符也是如此。

事實上,這些實際上並不需要被轉義。 這樣可行

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.

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