PHP preg_replace 匹配多行的正则表达式

标签 php regex

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

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

最佳答案

Maxwell Troy Milton King 是对的,但由于他的回答有点简短,我也将其发布并提供一些示例来说明。

首先,. 元字符默认不匹配换行符。许多正则表达式实现都是如此,包括 PHP 的风格。也就是说,拿文字:

$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”)都匹配。

关于PHP preg_replace 匹配多行的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240348/

相关文章:

regex - 如何使用 sed/awk 切换/旋转每两行?

PHP:如何检查字符串的大写特定部分?

php - GCM curl 操作超时

regex - 在第一个数字处分割字符串

regex - 如何使用sed替换字符串的一部分

regex - 将日期从 ISO 时间格式转换为 yyyy/mm/dd.hh :mm:ss

php - 正则表达式删除文本中条件的特定匹配(php)

php - 如何在 MySQL 中获取 future 日期的数据

javascript - 具有多个按钮的 Jquery 调用一个发送不同参数的函数

php - 将数据写入数据库时​​遇到问题