preg_match 不会忽略换行符

preg_match will not ignore new line breaks

任务:找到 10 个单词并忽略换行符。

我已经为 multi-line 添加了 m 标志,但它没有任何效果。

<?php

$string = "this is line one\n this is line two\n this is line three\n";
$pattern = '/([A-Za-z0-9\.]+ ){1,10}([A-Za-z0-9\.]+)/m';
preg_match($pattern, $string, $matches);
echo $matches[0];
echo "\n";

?>

结果:

this is line one

期望的结果:

this is line one this is line two this is line

为了达到预期效果,我只是手动删除了新的换行符。

虽然这个期望的结果也不完美..因为它总共有 11 个单词而不是 10..如果我能做到这一点,我仍然会更接近我的使命。

我的猜测是,也许您正在尝试使用双边界量词编写一些表达式,例如:

(?i)^(\s*[a-z0-9. ]{1,10}(?=\s|$)){0,4}$

Demo 1

(?i)^(\s*[a-z0-9. ]{1,10}(?=\s|$)){0,5}

Demo 2

(?i)(\s*[a-z0-9. ]{1,10}(?=\s|$)){0,5}

Demo 3

 (?:\S+(?=\s|$)\s*){6}

Demo 4

(?:\S+\s*){6}

Demo 5

或者用于捕获前六个单词,例如,

^(?:(\S+)\s*)(?:(\S+)\s*)(?:(\S+)\s*)(?:(\S+)\s*)(?:(\S+)\s*)(?:(\S+)\s*)

Demo 6

这是查找 10 个单词的正则表达式。
获得一场比赛,然后使用 space 加入第 1-10 组。

(?s)(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S).*?(?<!\S)([A-Za-z0-9\.]+)(?!\S)

https://regex101.com/r/g0Luco/1