用两个字符之间的换行符匹配字符串

时间:2018-08-16 14:13:19

标签: ruby regex

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

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

我只想找到

**hello
world**

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

**bar**
test **

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

2 个答案:

答案 0 :(得分:2)

您可以使用

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

请参见Rubular demo

详细信息

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

答案 1 :(得分:-1)

Wiktor已经给出了很好的答案。这是另一种方法:

(?<=\*{1,2})([^*])*(?=\*{1,2})

Tested here

注意:这在Ruby中不起作用,但可以在其他一些语言中使用

通过this answer:

中的链接
  

后向子表达式必须为固定宽度。