【发布时间】:2023-04-09 03:43:01
【问题描述】:
任务:找到 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.. 如果我能做到这一点,我仍然会离我的使命越来越近。
【问题讨论】:
-
将空格替换为
\s+。而且您仍然需要从结果中删除换行符。你不能匹配一个文本字符串,同时在这个匹配中删除一些重复的模式,你将不得不使用 2 个操作。 -
而如果你最多需要10个单词,你只需要调整量词
'/[A-Za-z0-9.]+(?:\s+[A-Za-z0-9.]+){0,9}/' -
m是修改^和$的行为,而不是做一个正则表达式多行。 -
您可能还想将
\b视为单词边界。
标签: php regex preg-match