首页 > 解决方案 > 匹配两个字符之间有换行符的字符串

问题描述

如何在 Ruby 中匹配两个星号之间的换行符?我有这个字符串

Foo **bar**
test **hello
world** 12345

我只想找到

**hello
world**

我试过了,\*{1,2}(.*)\n(.*)\*{1,2}但这匹配

**bar**
test **

我玩了一个非贪婪的匹配器,\*{1,2}(.*?)\n(.*?)\*{1,2}但这也不起作用,所以我希望有人能提供帮助。

标签: rubyregex

解决方案


您可以使用

/\*{1,2}\b([^*]*)\R([^*]*)\b\*{1,2}/

查看Rubular 演示

细节

  • \*{1,2}- 1 或 2 个星号
  • \b- 一个单词边界,下一个 char 必须是一个单词 char
  • ([^*]*)- 第 1 组:任何 0+ 个字符,除了*
  • \R- 换行序列
  • ([^*]*)- 第 2 组:除此之外的任何 0+ 个字符*
  • \b- 一个单词边界,前面的 char 必须是一个单词 char
  • \*{1,2}- 1 或 2 个星号

推荐阅读