[英]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.