所以我试图解析一些内容。它看起来像这样。
## This is a Title ##
- Content will go here, so blah blah blah -
现在我通过php / mysql从表中删除它,并使用preg_match来提取文本。
preg_match('/\##(.*?)\##/', $m_data['field'], $mod_title);
preg_match('/\-(.*?)\-/', $m_data['field'], $mod_content);
这很好用。但是,如果两者中的任何一个都有这样的换行符,我会得到一个php错误。
## This is a
Title ##
- Content will go here, so blah
blah blah -
这会导致以下php错误。
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 1
Filename: libraries/Functions.php(656) : eval()'d code
Line Number: 472
我认为它所考虑的偏移是
$title = $mod_title[1];
$content = $mod_content[1];
但是当换行时,数组mod_content为空。
我很确定这是我的正则表达,但我不是它的大师,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
只需在你的正则表达式中添加“s”修饰符:
preg_match('/\##(.*?)\##/s', $m_data['field'], $title);
preg_match('/\-(.*?)\-/s', $m_data['field'], $content);
s(PCRE_DOTALL)
如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。此修饰符等效于Perl的/ s修饰符。诸如[^ a]之类的否定类始终匹配换行符,与此修饰符的设置无关。
有关详情,请参阅:http://php.net/manual/en/reference.pcre.pattern.modifiers.php
答案 1 :(得分:0)
这是因为preg_match与断行不匹配。
解决这个问题的方法是以/ s结束,而不是仅使用/.
所以它会是这样的:
preg_match('/\##(.*?)\##/s', $m_data['field'], $title);
preg_match('/\-(.*?)\-/s', $m_data['field'], $content);