Regex 使用正则表达式在perl中最多删除uu?

Regex 使用正则表达式在perl中最多删除uu?,regex,perl,Regex,Perl,在perl中,我如何删除“\”前面的所有字符?因此,如果我有一个字符串是“124312412hohere”,它将替换为“hohere”。我想有一个非常简单的方法可以使用正则表达式来实现这一点,但我仍然是新手,所以我需要这里的帮助 这比它需要的要详细一点,但可能对您了解发生了什么更有价值: my $astring = "124312412_hithere"; my $find = "^[^_]*_"; my $replace = "_"; $astring =~ s/$find/$replac

在perl中,我如何删除“\”前面的所有字符?因此,如果我有一个字符串是“124312412hohere”,它将替换为“hohere”。我想有一个非常简单的方法可以使用正则表达式来实现这一点,但我仍然是新手,所以我需要这里的帮助

这比它需要的要详细一点,但可能对您了解发生了什么更有价值:

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];