求教Perl中的一个替换问题

gfeng0526 2009-07-04 09:13:02
假设变量$var = "abcFrank bbbFrank678Frankiii Frank 87tyt";
现在我想把倒数第一个Frank替换成Perl,如何用一个 $var =~ s///; 语句搞定?
如果是倒数第二个呢?或者有什么其他方法?
多谢了!
...全文
580 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx红杉树 2009-07-14
  • 打赏
  • 举报
回复
支持
gfeng0526 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ThirstyCrow 的回复:]
Perl code$var=~s/(.*)(Frank)((.*Frank){0})/$1perl$3/;#替换倒数第一个$var=~s/(.*)(Frank)((.*Frank){1})/$1perl$3/;#替换倒数第二个$var=~s/(.*)(Frank)((.*Frank){2})/$1perl$3/;#替换倒数第三个......
[/Quote]

我自己又仔细研究了一下:{2}表示前面的元素重复的次数,比如(.*Frank){2}表示匹配2个.*Frank。因为要替换Frank这个字符串,所以要得到这个词前面和后面的字符串。所以要用(.*)(Frank)开始,后面接的所有的字符串能匹配到几个Frank就决定了要替换的这个Frank处在什么位置。而且要用括号括起来((.*Frank){2}),所以对于/(.*)(Frank)((.*Frank){2})/, $1=(.*) $2=(Frank) $3=((.*Frank){2}) $4=(.*Frank)
如果只是要替换最后一个Frank的话,还可以更简单点:$var =~ s/(.*)Frank/$1perl/; 问题终于解决了,非常感谢ThirstyCrow!
Treazy 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenyonghua521 的回复:]
高,这是什么技术,没见过啊,给讲讲吧。
[/Quote]

这不就是替换操作嘛!

贪婪匹配+出现次数的应用
chenyonghua521 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ThirstyCrow 的回复:]
Perl code$var =~ s/(.*)(Frank)((.*Frank){0})/$1perl$3/; #替换倒数第一个
$var =~ s/(.*)(Frank)((.*Frank){1})/$1perl$3/; #替换倒数第二个
$var =~ s/(.*)(Frank)((.*Frank){2})/$1perl$3/; #替换倒数第三个
......
[/Quote]
高,这是什么技术,没见过啊,给讲讲吧。
ThirstyCrow 2009-07-05
  • 打赏
  • 举报
回复
$var =~ s/(.*)(Frank)((.*Frank){0})/$1perl$3/; #替换倒数第一个
$var =~ s/(.*)(Frank)((.*Frank){1})/$1perl$3/; #替换倒数第二个
$var =~ s/(.*)(Frank)((.*Frank){2})/$1perl$3/; #替换倒数第三个
......
fibbery 2009-07-05
  • 打赏
  • 举报
回复
有一个笨招:
将字符串反转,reverse,然后查找第二个knarF,取得左右字符串,连接lrep,再reverse新的字符串。

没找到模式替换中是否有替换指定第几个匹配字符串。

bgrobert 2009-07-04
  • 打赏
  • 举报
回复
用Frank将$var分组,然后再组合即可。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧