正则表达式 – Perl:如何只替换匹配的字符串部分?
发布时间:2020-12-14 02:29:41 所属栏目:百科 来源:网络整理
导读:我有一个字符串foo_bar_not_needed_string_part_123.现在在这个字符串中我只想在foo_后跟bar时删除not_needed_string_part. 我用下面的正则表达式: my $str = "foo_bar_not_needed_string_part_123";say $str if $str =~ s/foo_(?=bar)bar_(.*?)_d+//; 但
我有一个字符串foo_bar_not_needed_string_part_123.现在在这个字符串中我只想在foo_后跟bar时删除not_needed_string_part.
我用下面的正则表达式: my $str = "foo_bar_not_needed_string_part_123"; say $str if $str =~ s/foo_(?=bar)bar_(.*?)_d+//; 但它删除了整个字符串,只打印一个换行符. 所以,我需要的是只删除匹配的(.*?)部分.那么,输出是 foo_bar__123.
还有另一种方式,它很简单:
my $str = "foo_bar_not_needed_string_part_123"; $str =~ s/(?<=foo_bar_)D+//gi; print $str; 诀窍是使用lookbehind check anchor,并替换该锚点后面的所有非数字符号(不是符号).基本上,使用此模式,您只匹配需要删除的符号,因此无需捕获组. 作为旁注,在原始正则表达式(?=条形)中,条形结构是多余的.第一部分(lookahead)只有在某个位置跟随’bar’时才匹配 – 但这正是用模式的非超前部分检查的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |