perl正则表达式最小匹配前下划线的单词

时间:2014-01-16 03:30:52

标签: regex perl

我可以知道如何为这种情况编写正则表达式吗?

$aword = abc_def_ghi regexp substitute to abc_def_xxx
$bword = jkl_mno_pqr regexp substitute to jkl_mno_xxx
$cword = abc_def     regexp substitute to abc_xxx

深航

2 个答案:

答案 0 :(得分:1)

$aword = 'abc_def_ghi';
$aword =~ s/[^_]+$/xxx/;  # [^_]+$: to match non-underscore at the end of string.
print $aword  # => abc_def_xxx

答案 1 :(得分:0)

s/^[a-z]+(?:_[a-z]+)*_\K[a-z]+\z/xxx/

在仅由两个或更多字母a到z的“单词”组成的字符串中,将最后一个“单词”替换为xxx。

您可以在perlre中了解正则表达式。

^ \z: zero width assertions
[]: character class
+ *: quantifiers
(?: ): extended pattern (clustering)
\K: special escape