PHP';s preg_替换匹配多行的正则表达式

PHP';s preg_替换匹配多行的正则表达式,php,regex,Php,Regex,如何创建一个考虑到主题由多行组成的正则表达式 一个的“m”修饰符似乎不起作用。试试“s”修饰符。意思是“像一行一样对待” “m”允许使用“^”和“$”行的开头和结尾。麦克斯韦·特洛伊·米尔顿·金是对的,但由于他的答案有点短,我也将发布这篇文章,并提供一些例子来说明 首先,默认情况下,元字符与换行符不匹配。许多正则表达式实现都是如此,包括PHP的Flavor。也就是说,以文本为例: $text = "Line 1\nLine 2\nLine 3"; 还有正则表达式 '/.*/' 然后正则表达式

如何创建一个考虑到主题由多行组成的正则表达式


一个的“
m
”修饰符似乎不起作用。

试试“s”修饰符。意思是“像一行一样对待”


“m”允许使用“^”和“$”行的开头和结尾。

麦克斯韦·特洛伊·米尔顿·金是对的,但由于他的答案有点短,我也将发布这篇文章,并提供一些例子来说明

首先,默认情况下,
元字符与换行符不匹配。许多正则表达式实现都是如此,包括PHP的Flavor。也就是说,以文本为例:

$text = "Line 1\nLine 2\nLine 3";
还有正则表达式

'/.*/'
然后正则表达式将只匹配
行1
。你自己看看:

preg_match('/.*/', $text, $match);
echo $match[0]; // echos: 'Line 1'
因为
*
\n
处(新行字符)停止匹配。如果您想让它也与换行符匹配,请在正则表达式的末尾附加s修饰符(也称为DOT-ALL修饰符):

preg_match('/.*/s', $text, $match);
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3'
现在谈谈m修饰符(多行):这将使
^
不仅匹配输入字符串的开头,而且匹配每行的开头。与
$
相同:它将使
$
不仅匹配输入字符串的结尾,而且匹配每行的结尾

例如:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/', $text, $matches);
print_r($matches); 
它将只匹配3(在输入的末尾)。但是:

但是启用m修改器:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/m', $text, $matches);
print_r($matches);

每行末尾的所有(单个)数字(“1”、“2”和“3”)都匹配。

您确定正则表达式正确吗?请使用msU了解详细信息,阅读Ah IC下面的链接,明天将尝试@work。还有一个问题,如何匹配换行符、空格或制表符?到目前为止,我已经提出了“[\\n\\t]*”,这是正确的吗?只需使用
\s
,这意味着任何空格字符。\s匹配“空白”(意思是\t和空格),我相信它在与“s”一起使用时也可能包括\n。\Maxwell,不,在几乎所有的正则表达式风格中,
\s
至少匹配这四个字符
[\t\r\n]
(空格、制表符、回车符、换行符)。即使不是“单行”?