如何在perl中查找和替换正则表达式

时间:2015-12-07 13:22:17

标签: regex perl

我有一个文字,想要将所有\w\(替换为myword(,并将其替换为空格,因此它应为myword (。如何使用s///执行此操作?还是有其他办法吗?

5 个答案:

答案 0 :(得分:1)

试试这个

$s = "myword( word2(";
$s =~s/(\w+)(\()/$1 $2/g;
print $s;

来自@ikegami命令。我的上面的正则表达式\w+将回溯这是不必要的。并且无需将(分组,因为已知的一个。所以我相应地改变了我的正则表达式,

新RegEx

$s =~s/(\w)\(/$1 (/g;

答案 1 :(得分:1)

这是一种方式:

my $str = "myword(";
$str =~ s/(\w+)(\()/$1 $2/;
print $str, "\n";

输出:

myword (

答案 2 :(得分:1)

使用前瞻:

$ perl -pe 's/(\w)(?=\()/$1 /' <<< 'word('
word (

或者展望未来:

$ perl -pe 's/(?<=\w)(?=\()/ /' <<< 'word('
word (

答案 3 :(得分:1)

另一种方法是使用\K,即忘记之前匹配的内容:

#!/usr/bin/perl
use strict;
use warnings;

my $string = q{myword( myword2(};
$string=~s/\w\K\(/ (/g;
print $string,"\n";

答案 4 :(得分:1)

s/\w\K\(/ (/g   # 5.10+

s/(\w)\(/$1 (/g

s/(?<=\w)\(/ (/g

第一个比其他两个快得多,但都比其他正确的解决方案更快。 (不确定哪个是第二个和第三个中最快的。)