簡體   English   中英

如何在Perl中查找和替換正則表達式

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

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