繁体   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