2015-05-12 37 views
2

左右的时间内正则表达式线的X号,即时通讯试图选择内内容---痕迹,这显然是,但我必须使用适当的正则表达式事实上,并非所有的条目都会包含这个相同数量的元数据。选择使用给定的分隔符

的例子我尝试使用PHPpreg_match功能相匹配是这样的:

--- 
Title: A fresh start to all of us. Right? 
Slug: a-fresh-start-to-all-of-us-right 
Author: admin 
Date: 12/05/2015 16:29 
Draft: false 
Image: http://placehold.it/400x280 
Tags: codesans, install, markdown 
--- 

# A fresh start comes, after all. 

正如你所看到的,没有低于---痕迹可以匹配。

我试着去匹配这个正则表达式: /^(.*)?[^\n]$/gm
,但它似乎并不工作至今。我已经试图标记痕迹以使它们成为分隔符,但它也不起作用(这个正则表达式:/^(\-{3})?(.*)?(\-{3})?[^\n]$/gm)。

有什么指导吗?

回答

2

您需要使用DOTALL标志即s此:

/(\A|\R)-{3}\R(.+?)-{3}(\R|\z)/s 

BTW存在PHP没有g标志。

RegEx Demo

+1

哦,我现在看到我的错误。非常感谢你的队友! – Miranda

+1

匹配'------' – sln

+0

@sln是啊...即时尝试修复它使用正则表达式anubhava提供,但没有进展仍然。 :/ – Miranda

1

可以使用像这样(?m)^---.*\s+([\S\s]*?)^---
这种方式使用正常点。

(?m) 
^ --- .* \s+ 
([\S\s]*?)     # (1) 
^ ---