Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中,我想在字符串末尾屏蔽/剪切X个字符(X可以是一组字符串中的一个)_Perl - Fatal编程技术网

在Perl中,我想在字符串末尾屏蔽/剪切X个字符(X可以是一组字符串中的一个)

在Perl中,我想在字符串末尾屏蔽/剪切X个字符(X可以是一组字符串中的一个),perl,Perl,我有两个字符串,XXXXXX编号和XXXXXX日期,我想从每个字符串中去掉所有XXXXXX。XXXXXX表示的实际字符数可能会有所不同。后缀“number”和“date”是常量。XXXXXX编号和XXXXXX日期应为XXXXXX。使用正则表达式: ($newvar = $oldvar) =~ s/^(.*)(number|date)$/$1/; 如果对$oldvar的原始值(包括Xes)没有mor euse,则简化为 $oldvar =~ s/^(.*)(number|date)$/$1/;

我有两个字符串,XXXXXX编号和XXXXXX日期,我想从每个字符串中去掉所有XXXXXX。XXXXXX表示的实际字符数可能会有所不同。后缀“number”和“date”是常量。XXXXXX编号和XXXXXX日期应为XXXXXX。

使用正则表达式:

($newvar = $oldvar) =~ s/^(.*)(number|date)$/$1/;
如果对
$oldvar
的原始值(包括Xes)没有mor euse,则简化为

$oldvar =~ s/^(.*)(number|date)$/$1/;
或者:

$string =~ s/ (?:date|number) \z//x;

对于该任务,我将使用一个正则表达式,如
$line=~s/(number | date)$/
,其中
$line
可以是任意一行


如果您的行在
编号
日期
之后有其他字符,则也必须将它们过滤掉。另一种方法是使用类似于
($num)=($line=~/^(.*)(number | date.*$/)的表达式

一个简单的替换即可:

$str =~ s/(?:number|date)\z/;

其他人使用了不必要的捕获(
(…)
),
而不使用
/s
,以及
$
(它不仅在字符串末尾匹配),而不是
\z
。这些都是错误。
$str =~ s/(?:number|date)\z/;