2014-02-17 64 views
0

我需要這樣的內容:'s/oldstr/newstr/g;pattern',即我想替換oldstr並在替換後的字符串中找到pattern。所有在一個正則表達式。Perl在一個正則表達式中搜索並替換

+0

我猜如果模式與替換無關,它是有道理的。比如,更改字符串並將結果與​​更復雜的模式進行匹配。用's/oldstr/newstr/g'來做 – simbabque

+0

?沒有。 – avalanche

+2

爲什麼在一個正則表達式?顯示完整的樣本輸入和您想要的結果? – ysth

回答

3

如果您想先替換並在結果字符串中查找模式,則可以將兩個表達式放在一起。用/r標誌替換將返回已更改的字符串,並且m運算符會將該字符串與該模式進行匹配。

use Test::Simple 'no_plan'; # this is just for the ok() function 

my $str = 'foobar'; 
ok($str =~ s/o/0/gr =~ m/\d\d/); 
ok($str =~ s/o/0/gr !~ m/\d\d\d/); 

__END__ 
ok 1 
ok 2 
1..2 
+1

從技術上講,這是每種情況下的兩個正則表達式,但它與OP很可能會得到他想要的一樣接近。我不確定它是否贏得了可讀性的標記,但那不是你的錯。 –

+0

是的,我知道。而且我也沒有聲稱讓它可讀。 :) – simbabque