获取两个字符串之间的字符串-第一个字符串以换行符结尾

时间:2019-09-04 09:54:35

标签: regex

我有类似的SQL代码:

--START
select * from table;
--END

我需要获取--START--END之间的所有内容。我想出的是

/--START(?s)(.*)--END/

`/--START(\r\n|\r|\n)(?s)(.*)--END/`

第一个可以正常工作,但是在选择之前添加一个空行。所以最后我得到了

empty line
select * from table;

我需要做的是一开始就摆脱这一空白行。有人会帮助我如何到达那里:找到--START + newline和'--END'之间的所有内容吗?

我尝试了Match linebreaks - \n or \r\n?,但是答案对我没有用。

1 个答案:

答案 0 :(得分:1)

通常,您可以使用类似

的模式
/--START\s*(.*?)\s*--END/s

请参见regex demo\s*将匹配任何0+空格,但在--START之后和--END之前不需要换行。

将有更具体的模式

/--START\h*\R\s*(.*?)\h*\R\s*--END/s

或者,如果--START--END应该出现在行的开头,请添加锚点和m修饰符:

/^--START\h*\R\s*(.*?)\h*\R\s*--END$/sm

请参见regex demoanother regex demo

详细信息

  • ^-行的开头(因为使用了m修饰符)
  • --START-左定界符
  • \h*-0+个水平空格
  • \R-换行符
  • \s*-超过0个空格
  • (.*?)-第1组:任意0个以上的字符,尽可能少
  • \h*-0+个水平空格
  • \R-换行符
  • \s*-超过0个空格
  • --END-右定界符
  • $-行尾。