我有一个文字,想要将所有\w\(
替换为myword(
,并将其替换为空格,因此它应为myword (
。如何使用s///
执行此操作?还是有其他办法吗?
答案 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
第一个比其他两个快得多,但都比其他正确的解决方案更快。 (不确定哪个是第二个和第三个中最快的。)