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