如何在正则表达式中允许一个换行符?

时间:2018-09-28 17:57:55

标签: regex preg-match-all

我将两个标签之间的文本匹配为

/open(.*?)end/

如何在两个标签之间允许一个换行符(\n)?如果我使用s修饰符,则允许所有换行符。

2 个答案:

答案 0 :(得分:1)

怎么样:

/open([^\n\r]*\R?[^\n\r]*)end/

其中

  • [^\n\r]*表示0或更大,也没有换行符
  • \R?表示0或1任何类型的换行符

答案 1 :(得分:1)

您可以使用

'~open(?:(?!open|end).)*(?:\R.*?)?end~'

请参见regex demo

详细信息

  • open-开始的子字符串
  • (?:(?!open|end).)*-尽可能匹配匹配回形符以外的其他任何字符的调和贪婪令牌,该换行符不是endstart子字符串的起始字符
  • (?:\R.*?)?-换行符的可选序列,后跟除换行符以外的任何0+字符,并且尽可能少
  • end-尾随子串。