作业帮 > 历史 > 作业

在perl中,用s///进行替换的问题

来源:学生作业帮 编辑:作业帮 分类:历史作业 时间:2024/05/11 04:20:57
在perl中,用s///进行替换的问题
$_="huge dinosaur"
s/\w+$/($`!)$&/; #结果为什么是“huge(huge )dinosaur”
s/\s+(!\w+$)/$1/; #结果为什么还是“huge(huge )dinosaur”请解释一下
s/huge/gigantic/; #为什么只替换了第一个huge没有替换第二个?
出自小骆驼 166页
$_="huge dinosaur"
s/\w+$/($`!)$&/; #结果为什么是“huge(huge !)dinosaur” 请解释一下
$` 又叫 pre-match, 就是匹配字串"之前" 的东西,
因为匹配到的是 "dinosaur" 所以其前面的就是 huge
$& 又叫 match, 就是匹配到字串,
因为匹配到的是 "dinosaur" 所以最後加上 "dinosaur"
s/\s+(!\w+$)/$1/; #结果为什么还是“huge(huge !)dinosaur”请解释一下
这个很简单, 因为根本找不到匹配, 所以没有进行过替换, 原封还给你了
s/huge/gigantic/; #为什么只替换了第一个huge没有替换第二个?
因为这不是 greedy(贪婪), 只要完成一次匹配就会返回, 如果你还想换掉第 2 个
你可以写成 s/huge/gigantic/g;