簡體   English   中英

Ruby正則表達式“直到空行”

[英]Ruby regular expression to “go until blank line”

我有以下測試字符串:

puts "Wrong guess receives feedback"
p (game.guess(11) == "Too high!")

puts "Wrong guess deducts from remaining guesses"
p (game.remaining_guesses == 3)

我正在用英語嘗試:

capture everything after "puts " 
until you get to a blank line
(aka beginning of a string followed immediately by end of string)

我知道如何“直到遇到某事”。 例如,“直到遇到雙引號”

[6] pry(main)> re = /[^"]+/
=> /[^"]+/
[7] pry(main)> "stuff before a quote\"".slice(re)
=> "stuff before a quote"

我認為re = /^$/將“捕獲空白行” http://rubular.com/r/E5F7wH6sNq

那么我將如何捕獲“'put'之后的所有內容,直到您到達空白行”呢? 我嘗試了以下方法:

re = /puts ([^^$]+)/

但這沒有用: http : //rubular.com/r/yUhA090fLm

這將是一種方法:

re = /puts (.*?)\r?\n\r?\n/m

.*表示“除換行符外,任何字符都零個或多個”。 我會解釋? 后來。

最后的m (對於“多行”)修飾符表示“零個或多個任何字符,包括換行符”。

\\r?\\n\\r?\\n連續是兩個換行符,這說明在不同系統上可以用不同的方式表示它。 您可以用$^代替此部分,但是(.*?)最終將包含尾隨換行符,因為“行尾”的$匹配換行符之后,而不是之前。

? 使.* “ lazy” –盡可能少地匹配,而不是“貪婪”並盡可能多地匹配。 如果您有多個空行,則這是相關的:您可能不希望它貪婪地匹配“零個或多個字符,直到最后一個空行”; 您希望它延遲匹配“零個或多個任何字符,直到第一個空白行”。

/puts ([^^$]+)/[^abc]實際上是“不是a,b或c的任何一個字符”的快捷方式。 這並不意味着“不是'a'跟着'b'跟着'c'”。

str.scan /(?<=puts ).*?(?=\R\R|\z)/m                                                                                                           
#⇒ [
#    [0] "\"Wrong guess receives feedback\"\np (game.guess(11) == \"Too high!\")",
#    [1] "\"Wrong guess deducts from remaining guesses\"\np (game.remaining_guesses == 3)"
# ]

正向后置puts ,然后是非貪婪的內容,直到出現兩次回車符/空行(請注意\\R任何平台 (包括Win和MacOS)上捕獲后者)或輸入結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM