[英]ruby regex match from end of string
我今天在某地读过,SO中的正则表达式标签最能“给我ze代码”类型的问题,所以我谨慎地问...我试过了,但如果这是重复的,请告诉我,以便我可以删除。
[First]sometext[Second]
我想在Ruby中使用Regex在second []之间返回值:
Second
我到目前为止:
(?<=\[)(.*)(?=\])
返回
First]sometext[Second
\[.*?(\[)
这个分组将返回
[First]sometext[
所以我一直在努力以某种方式混合这两个但没有运气..希望有人可以提供帮助。
我在SO中找到的最接近的参考文献是在“正则表达式中匹配第二或第n次出现”中搜索的,我无法在我的问题上使用它。
我的解决方法是使用gsub将[First]
和“”替换为初始字符串:
\[(.*?)\]
然后做另一场比赛..但我想知道如何使用正则表达式使用。
> s = "ipsum[First]sometext[Second]lorem"
=> "ipsum[First]sometext[Second]lorem"
> s =~ /\[.*?\].*?\[(.*?)\]/
=> 5
> $1
=> "Second"
有很多方法可以解决这个问题。 尚未提及的是输入锚点$
的结束。
s = "[First]sometext[Second]"
s.match(/[\[][^\[]+[\]]$/) # => #<MatchData "[Second]">
s.match(/[\[]([^\[]+)[\]]$/) # => #<MatchData "[Second]" 1:"Second">
这仅适用于[something]
结束字符串的特定情况。
'anchors'部分描述了$
和\\z
和\\Z
之间的细微差别。
你很亲密 使用此选项捕获第一个捕获组中的相关部分,然后使用$1
访问它
.*?\\[.*?\\[(.*?)\\].*
如果你只想要一个包含任意数量的[..]
的字符串中的最后一个[..]
所包含的文本,这可能会更方便。 [编辑:我会离开这个,但@OnlineCop有一个更好的解决方案,我在上一句中描述的目标。 这也是原始问题的绝佳答案。 ]
反转字符串,然后在非捕获组(?:\\])
搜索带有捕获]
的正则表达式的子字符串,捕获*.?
在捕获组1( ?
使它非贪婪)和捕获[
第二非捕获组中使用。 最后,检索并反转捕获组1中包含的字符串:
str = "The [first] time I was mad. The [second] time I was irate!"
str.reverse[/(?:\])(.*?)(?:\[)/,1].reverse #=> "second"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.