如何在正则表达式中允许单行中断?

How to allow a single line break in regex?

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

/open(.*?)end/

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

怎么样:

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

其中

  • [^\n\r]* 表示 0 个或多个也不是换行符
  • \R? 表示 0 或 1 任何类型的换行符

您可以使用

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

regex demo

详情

  • open - 起始子串
  • (?:(?!open|end).)* - 匹配除换行符以外的任何字符的缓和贪婪标记,该字符不是 endstart 子字符串的起始字符,尽可能多
  • (?:\R.*?)? - 一个可选的换行符序列,后跟除换行符以外的任何 0+ 个字符,尽可能少
  • end - 尾随子字符串。