我试过从字符串中删除重复项,"a","b","b","a","c"
取消结果后是"a","b","c",
。我已经实现了这一点,但我有一个疑问正则表达式替换的工作正则表达式替换如何在perl中工作?
use warnings;
use strict;
my $s = q+"a","b","b","a","c"+;
$s=~s/ ("\w"),?/($s=~s|($1)||g)?"$1,":"" /xge;
#^ ^
#| Consider this as s2
#Consider this as s1
print "\n$s\n\n";
s1
值包含字符串"a","b","b","a","c"
步骤1
置换后:
猜测,是什么数据包含s1
以下变量"a","b","b","c"
或"a","b","b","a","c"
或,"b","b",,"c"
数据。
我已经运行与EVAL正则表达式分组
$s=~s/ ("\w"),? (?{print "$s\n"})/ ($s=~s|($1)||g)?"$1,":"" /xge;
结果是
"a","b","b","a","c"
,"b","b",,"c" #This is from after substitution
,,,,"c"
,,,,"c"
,,,,"c"
现在我dobut是s2
变量也$s
为什么它不与s1
连接在一起,这意味着在第二步骤结果应该是"a","b","b","c"
(所有字符串"a"
被替换为空并且在$s
中添加了a
)。
编辑
从EVAL分组结果是(?{print $s})
"a","b","b","a","c"
,"b","b",,"c"
,,,,"c"
,,,,"c"
,,,,"c"
我印刷$s
变量这是给"a","b","c"
取代行之后,如何该输出来了。?
这是相当困难的检查正则表达式,并推断它应该做的,也许将其分成多行,并为每个区块添加评论,也许其他人会努力投入一些时间来解决您的问题。 –
从我的角度来看,你的问题来自你的正则表达式中的空格。如果你尝试'$ s =〜s /(“\ w”),? /_/G; 打印“\ nString用_:$ s替换\ $ 1后';',你会注意到你的字符串是不变的,但是如果你删除空格,你将会有'$ s =〜s /(”\ w“) ,?/ _/g;'然后''1'将被'_'取代。 –
我认为在're'模块中有[一些选项](https://perldoc.perl.org/re.html#%27Debug%27-mode)用于调试。 –