PHP正则表达式不匹配带s修饰符的换行符

PHP正则表达式不匹配带s修饰符的换行符,php,regex,Php,Regex,我试图匹配一系列跨越两行的单词 假设我有以下文本: this is a test another line 使用preg_match的我的正则表达式模式: /test.*another/si 在此处测试: PHP模式修饰符: 我读到的所有内容都指向使用“s”修饰符来启用“.”字符以匹配新行,但我无法使其工作。有什么想法吗?将修饰符放在正则表达式中: /(?s)test.*another/i 是,s修饰符(也称为点所有修饰符)强制点也匹配换行符 您的正则表达式使用正确,这似乎适合我 $t

我试图匹配一系列跨越两行的单词

假设我有以下文本:

this is a test
another line
使用preg_match的我的正则表达式模式:

/test.*another/si
在此处测试:

PHP模式修饰符:


我读到的所有内容都指向使用“s”修饰符来启用“.”字符以匹配新行,但我无法使其工作。有什么想法吗?

将修饰符放在正则表达式中:

/(?s)test.*another/i

是,
s
修饰符(也称为点所有修饰符)强制点
也匹配换行符


您的正则表达式使用正确,这似乎适合我

$text = <<<DATA
this is a test
another line
DATA;

preg_match('/test.*another/si', $text, $match);
echo $match[0];

您的正则表达式正确,在我的本地计算机上运行良好:

$input_line = "this is a test
another line";

preg_match("/test.*another/si", $input_line, $output_array);
var_dump($output_array);
它产生以下输出:

array(1) {
  [0]=>
  string(13) "test
another"
}

所以我猜phpliveregex.com工作不正常,给你错误的结果。

这对我来说很有效。也许你链接到的网站坏了。在你的测试页面上,如果你点击preg_match_all选项卡,你可以正确地看到模式匹配。是的,该网站肯定坏了
preg\u match\u all
preg\u replace
正常工作,但
preg\u match
将每一行视为单独的输入。此外,底部的备忘单是逐字复制的。感谢您确认它有效。稍后我将在我的PHP环境中确认结果。这似乎没有什么区别。当我测试它们时,这和您使用的正则表达式都工作得很好。正如@byte255所指出的,您测试它的站点一定有问题。事实上,如果您单击该站点右侧的“preg_replace”并填写替换值,您将看到正则表达式实际上工作正常。
array(1) {
  [0]=>
  string(13) "test
another"
}