Regex 使用正则表达式在perl中最多删除uu?
在perl中,我如何删除“\”前面的所有字符?因此,如果我有一个字符串是“124312412hohere”,它将替换为“hohere”。我想有一个非常简单的方法可以使用正则表达式来实现这一点,但我仍然是新手,所以我需要这里的帮助 这比它需要的要详细一点,但可能对您了解发生了什么更有价值:Regex 使用正则表达式在perl中最多删除uu?,regex,perl,Regex,Perl,在perl中,我如何删除“\”前面的所有字符?因此,如果我有一个字符串是“124312412hohere”,它将替换为“hohere”。我想有一个非常简单的方法可以使用正则表达式来实现这一点,但我仍然是新手,所以我需要这里的帮助 这比它需要的要详细一点,但可能对您了解发生了什么更有价值: my $astring = "124312412_hithere"; my $find = "^[^_]*_"; my $replace = "_"; $astring =~ s/$find/$replac
my $astring = "124312412_hithere";
my $find = "^[^_]*_";
my $replace = "_";
$astring =~ s/$find/$replace/;
print $astring;
另外,您的问题中有一些相互冲突的要求。如果您只需要此处
(不带前导的\u
),请将其更改为:
$astring =~ s/$find//;
您可以尝试以下方法:-
$_ = "124312412_hithere";
s/^[^_]*_//;
print $_; # hithere
请注意,这也将删除。
(正如我从示例输出推断的那样)。如果你想保留。
(根据你的第一句话,你想要什么似乎很可疑),你可能需要使用@ikegami的答案中的向前看
另外,为了更清楚一点,regex中的任何替换和匹配都默认应用于$\uu
。因此,您不需要显式地将它绑定到$\uu
。这是隐含的
所以,s/^[^ _uu]*./
基本上与-$\u=~ s/^[^\uU]*\ uU/代码>,但实际上不需要后面的字符。删除所有字符,包括“\u
”:
删除“”之前的所有字符:
删除“\
”(假设存在“\
”)之前的所有字符:
我知道这与要求的略有不同,但在这种情况下(您知道要查找的字符存在于字符串中),我更喜欢使用split
:
$str = '124312412_hithere';
$str = (split (/_/, $str, 2))[1];
在这里,我将字符串拆分为多个部分,使用“\u1”作为分隔符,但最多为两个部分。然后,我将第二部分分配回$str
这个解决方案中仍然有一个正则表达式(the//),但我认为这是一个比充满字符类、条件匹配等的正则表达式更容易阅读和理解的解决方案。[^\u]*.
是您的正则表达式。第一部分匹配所有内容,直到下划线,u匹配自身。my@var=split(/u/,$str)$str=$var[1]代码>@BradKoch-不完全是。您忘记了*或+修饰符。您的正则表达式目前只匹配一个非下划线,后跟一个下划线。现在我看起来像个疯子:-)对于一个不熟悉正则表达式的人来说,他会理解你的正则表达式是在$上运行的吗?我认为如果你使用:$str=“124312412_hohere”会更清楚$str=~s/^[^.]*.//g@蒂玛。。好了。我添加了一些内容,以使其更清晰。这仅在字符串最初包含\uu
时有效。肯定不是我喜欢的解决方案,因为通常情况下,您需要添加一个冗余的if//
或类似的解决方案。/g
如果没有/m
,当您的模式以^
开头时,它是没有用的。
s/^[^_]*(?=_)//;
s/^[^_]*//;
$str = '124312412_hithere';
$str = (split (/_/, $str, 2))[1];