我的正则表达式在哪里出错?

时间:2010-10-07 13:33:52

标签: php regex markdown

我正试图从Markdown格式文档中删除第一段:

  

这是第一段。

     

这是第二段。

answer here为我提供了一个解决方案,该解决方案匹配以双换行符结尾的第一个字符串。

完美,除了一些文本以Markdown风格的标题开头:

  

###这是一个h3标题。

     

这是第一段。

所以我需要:

  • 跳过以一个或多个#符号开头的任何行。
  • 匹配以双换行符结尾的第一个字符串。

换句话说,在上面的两个例子中都返回'这是第一段'。

到目前为止,我尝试了很多变种:

"/(?s)(?:(?!\#))((?!(\r?\n){2}).)*+/

但我不能让它返回正确的比赛。

在我的环顾中,我哪里出错了?

我在PHP(preg_match())中这样做,如果这有所不同。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以尝试

"/(?sm)^[^#](?:(?!(?:\r\n|\r|\n){2}).)*/"

我使用(?sm)代替(?s)启用了多行选项,并在新行开始每次检查,这可能不是以#开头。我使用了\r\n|\r|\n而不是\r?\n,因为我的测试环境有一些有趣的换行符=)