[英]How to find and replace a regex in perl
我有一個文本,想要將所有\\w\\(
,例如myword(
替換為一個空格,所以應該是myword (
。如何用s///
?或有另一種方法來做到這一點)。 ?
嘗試這個
$s = "myword( word2(";
$s =~s/(\w+)(\()/$1 $2/g;
print $s;
從@ikegami命令開始。 我上面的正則表達式\\w+
將回溯這是不必要的。 沒必要組(
,因為已知的一個。因此我適時改變我的正則表達式,
新正則表達式
$s =~s/(\w)\(/$1 (/g;
這是一種方法:
my $str = "myword(";
$str =~ s/(\w+)(\()/$1 $2/;
print $str, "\n";
輸出:
myword (
使用前瞻:
$ perl -pe 's/(\w)(?=\()/$1 /' <<< 'word('
word (
或一起向前看和向后看:
$ perl -pe 's/(?<=\w)(?=\()/ /' <<< 'word('
word (
另一種方法是使用\\K
即忘記之前匹配的內容:
#!/usr/bin/perl
use strict;
use warnings;
my $string = q{myword( myword2(};
$string=~s/\w\K\(/ (/g;
print $string,"\n";
s/\w\K\(/ (/g # 5.10+
要么
s/(\w)\(/$1 (/g
要么
s/(?<=\w)\(/ (/g
第一個比其他兩個要快得多,但是都比提供的其他正確解決方案要快。 (不知道哪一個是第二和第三最快的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.