问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Ruby正则表达式 - 一个表达式给各分组替换不同内容

发布网友 发布时间:2022-04-18 22:58

我来回答

2个回答

懂视网 时间:2022-04-19 03:19

正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合。
语法

正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式,如下所示:

/pattern/
/pattern/im # 可以指定选项
%r!/usr/local! # 一般的分隔的正则表达式
实例
#!/usr/bin/ruby
 
line1 = "Cats are smarter than dogs";
line2 = "Dogs also like meat";
 
if ( line1 =~ /Cats(.*)/ )
 puts "Line1 contains Cats"
end
if ( line2 =~ /Cats(.*)/ )
 puts "Line2 contains Dogs"
end

这将产生以下结果:

Line1 contains Cats

正则表达式修饰符

正则表达式从字面上看可能包含一个可选的修饰符,用于控制各方面的匹配。修饰符在第二个斜杠字符后指定,如上面实例所示。下标列出了 可能的修饰符:

201541093958504.jpg (982×274)

就像字符串通过 %Q 进行分隔一样,Ruby 允许您以 %r 作为正则表达式的开头,后面跟着任意分隔符。这在描述包含大量您不想转义的斜杠字符时非常有用。

# 下面匹配单个斜杠字符,不转义


%r|/| 
 
# Flag 字符可通过下面的语法进行匹配
%r[]i 

正则表达式模式

除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | ),其他所有字符都匹配本身。您可以通过在控制字符前放置一个反斜杠来对控制字符进行转义。

下表列出了 Ruby 中可用的正则表达式语法。

201541094045775.jpg (957×701)

201541094114283.jpg (957×731)201541094152882.jpg (956×720)201541094244206.jpg (951×711)201541094311488.jpg (943×723)201541094334570.jpg (964×279)搜索和替换

sub 和 gsub 及它们的替代变量 sub! 和 gsub! 是使用正则表达式时重要的字符串方法。

所有这些方法都是使用正则表达式模式执行搜索与替换操作。sub 和 sub! 替换模式的第一次出现,gsub 和 gsub! 替换模式的所有出现。

sub 和 gsub 返回一个新的字符串,保持原始的字符串不被修改,而 sub! 和 gsub! 则会修改它们调用的字符串。

下面是一个实例:

#!/usr/bin/ruby
 
phone = "2004-959-559 #This is Phone Number"
 
# 删除 Ruby 的注释
phone = phone.sub!(/#.*$/, "") 
puts "Phone Num : #{phone}"
 
# 移除数字以外的其他字符
phone = phone.gsub!(/D/, "") 
puts "Phone Num : #{phone}"

这将产生以下结果:

Phone Num : 2004-959-559
Phone Num : 2004959559

下面是另一个实例:

#!/usr/bin/ruby
 
text = "rails are rails, really good Ruby on Rails"
 
# 把所有的 "rails" 改为 "Rails"
text.gsub!("rails", "Rails")
 
# 把所有的单词 "Rails" 都改成首字母大写
text.gsub!(/rails/, "Rails")
 
puts "#{text}"

这将产生以下结果:

Rails are Rails, really good Ruby on Rails

热心网友 时间:2022-04-19 00:27

str.gsub!(/[BE]/, 'X').gusb!(/[CF]/, 'Y')追问这种级联的方式可以使用,但是想知道能不能用一个表达式解决这个问题所以提问了一下。谢谢。
另外有一点要考虑的是,如果第一个表达式匹配失败,第二个表达式的接收者就是NilClass,这样会导致异常。

追答str.gsub!(/bc|ef/, 'xy')

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
东北人眼中的南方人? 酒店管理研究生就业很难吗 在美国学酒店管理的就业前景 怎么样 美国酒店管理研究生的就业前景怎么样? 流放者柯南克立尔城堡在哪 克立尔的堡垒怎么进入 《刺客信条》兄弟会全版修改哪里有? 跪求 我的猫用直流12V直接供电 现在烧毁 打开电源现在无反应 应该是... 感情爱上你一生不放弃,是什么歌曲名字里的歌词 起亚嘉华商务车天一热空调就不工作 在Microsoft Office Word 2003中,页眉上打了字,但想把页眉线去掉怎么去 谁知道word中页眉怎么去掉 WORD文档,页眉下的黑线如何去掉!来高手! 教育学心理学一般有哪些常见的问答题 WORD文档里我插入一张图片做页眉,可是我要怎么去掉页眉的 下划线了 ?求助下WORD高手!!! word 2010 中编辑页眉时 编辑好了发现每页都有,我只想本页有 怎么设置啊 还有如何让页眉的文字有阴影的感 教育心理学的考点重点有哪些 玫瑰香和茉莉香在一起会不会有毒? 关于Ruby正则表达式的问题 华为C8812,安装软件:宏源证券手机交易,无法使用 我在申万宏源开户为什么用不同花顺手机炒股软件 有没有宏源证券手机版的交易软件呀。 手机版,宏源证券独立交易,软件下载 宏源证券交易软件下载 怎样在网上下载正版的宏源证券手机版 iphone3GS如何下载宏源证券交易软件? 诺基亚N96安装完安全管家以后,手机屏幕上有个小盾牌是怎么回事 微信朋友圈发文字必须带图片吗?如何在微信朋友圈中只发送文字而不带图片?谢谢了! 为何我的软件上都有一个盾牌的图标,见下图。有什么办法可以取消吗? qq如何屏蔽不认识的人看qq空间 ruby 正则表达式的问题 在线电影播放几分钟就卡住不动了!急!!! 怎样简单的令歌曲降调,就像K歌房的一样? 跪求88分钟 百度云免费在线观看资源 请问,黄油可以干煮吗,不放水就那么煮会煮成沸腾的么? 求 四分钟 Vier Minuten 百度云免费在线观看资源 在线看视频,为什么断网后还能继续播放几分钟? 《33分钟侦探》免费在线观看完整版高清,求百度网盘资源 免费的初一数学上册北师大版试卷 在线看视频,几分钟之后就黑屏 七年级上学期数学北师大版期末试卷 梦见一个小男孩大概5岁多一直跟着我走,甩都甩不掉 数学期末试卷(七年级上册北师大版) Ruby语言,使用正则表达式提出一段文字中所有满足条件的字符串。 大众捷达更换刹车油多长时间? 大众捷达多久更换刹车油? 大众捷达刹车油多久更换 捷达车防冻液、刹车油、助力油、变速箱油更换周期是多少? 05款手动档捷达多长时间换变速箱油,刹车油,防冻液 QQ里的系统信息