簡體   English   中英

如何使用REGEX匹配捕獲多個模式? (紅寶石)

[英]How do I match capture multiple patterns using REGEX? (Ruby)

這是我嘗試使用ruby捕獲的測試字符串:

<?lang 
  this_should_be_captured();
  and_also_this();
  and_this();
?>

this text should NOT be captured

<?lang this_should_also_be_captured(); ?>

當我使用此正則表達式時:

(<\?lang(\n|.)*\?>)

http://rubular.com/r/qSOOzq6HAx所示,該匹配項捕獲了所有內容(包括我不需要的部分:“不應捕獲此文本”)。

如何正確捕獲兩個不同的塊而不捕獲不需要的塊?

您要使用惰性量詞

(<\?lang(\n|.)*?\?>)

? *表示懶惰后 這意味着與其嘗試消耗盡可能多的字符來進行匹配( greedy ),不如使用最少的字符來滿足表達式。

您可以使用多行模式使其更簡單。 您也不需要外部括號,因為這與整個匹配項相同,可以通過$~獲得。 如果要捕獲<?lang ?>內部的內容,則可以在其中放置括號。

/<\?lang(.*?)\?>/m

PS。

  • 當交替模式是單個字符時,可以使用[ ]代替括號( ) 例如[\\n.]
  • 即使當您需要使用括號來顯示替代內容時,也應該使用非捕獲括號(?: ) :),除非您需要引用內容,因為這樣會使內容比使用捕獲括號( )更快。 例如, (?:\\n|.)

暫無
暫無

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

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