我有一个变量,我必须在%%的中间加上以$$开头的单词。我使用拆分工作......但仅适用于某些情况。
示例:
#!/usr/bin/perl
my $lastline ="%Filters_LN_RESS_DIR%\ARC\Options\Pega\CHF_Vega\$$(1212_GV_DATE_LDN)";
my @lastline_temp = split(/%/,$lastline);
print @lastline_temp;
my @var=split("\\$\\$",$lastline_temp[2]);
print @var;
我按预期得到了o / p。但是我可以使用Grep命令获得相同的效果。我的意思是我不想使用array[2]
或array[1]
。这样我就可以轻松地替换这些值。
答案 0 :(得分:1)
首先,在使用引号时要非常小心,我不确定你的意思是不是
'%Filters_LN_RESS_DIR%\ARC\Options\Pega\CHF_Vega\$$(1212_GV_DATE_LDN)'
代替
"%Filters_LN_RESS_DIR%\ARC\Options\Pega\CHF_Vega\$$(1212_GV_DATE_LDN)"
这可能是一个不同的字符串。例如,如果进行评估,"$$"
表示变量$PROCESS_ID
。
在尝试解决谜语(不确定)之后,引用你的字符串
my $lastline =
'%Filters_LN_RESS_DIR%\ARC\Options\Pega\CHF_Vega\$$(1212_GV_DATE_LDN)'
不同,我会使用:
my ($w1, $w2) = $lastline =~ m{ % # the % char at the start
([^%]+) # CAPTURE everything until next %
[^(]+ # scan to the first brace
\( # hit the brace
([^)]+) # CAPTURE everything up to closing brace
}x;
print "$w1\n$w2";
提取你的话。结果:
Filters_LN_RESS_DIR
1212_GV_DATE_LDN
但轻松替换值是什么意思?哪个值?
现在让我们提取'\'
分隔的“单词”。使用简单的拆分:
my @words = split /\\/, # use substr to start split after the first '\\'
substr $lastline, index($lastline,'\\');
如果你删除最后一个条目($$(..)
字符串),你会得到反斜杠之间的单词:
pop @words; # remove the last element '$$(..)'
print join "\n", @words; # print the other elements
结果:
ARC
Options
Pega
CHF_Vega
使用grep 更好吗?似乎:
my @words = grep /^[^\$%]+$/, split /\\/, $lastline;
和
print join "\n", @words;
也会导致:
ARC
Options
Pega
CHF_Vega
也许这就是你追求的目标?你想用这些做什么?
此致
RBO
答案 1 :(得分:1)
我真的不知道如何获得您期望的输出。因为你把数据放在“繁忙”的引号中(插值,双精度......),它会被存储为:
'%Filters_LN_RESS_DIR%ARCOptionsPegaCHF_Vega$01212_GV_DATE_LDN)'
'A'
,文字'O'
,文字'P'
,.... '0'
是$(
(又名$REAL_GROUP_ID
)的值,您无意中要求它进行插值。因此,没有序列'$$'
到拆分。 使用grep
命令可以获得相同的效果吗?这取决于“相同”是什么。您将结果保存在数组中,grep
的目的是从数组中排除内容。如果使用非平凡的grep:grep {; 1 } @data
,您既不会拥有数组,也不会拥有数组的输出。
实际上,假设@vars
中的单个字符串是“结果”,您可以使用此正则表达式获得完全相同的结果。
m/%([^%]*)$/
当然,这不过是
substr( $lastline, rindex( $lastline, '%' ) + 1 );
可以快8到10倍。