Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP preg_match(.*)与过去的换行符不匹配_Php_Preg Match - Fatal编程技术网

PHP preg_match(.*)与过去的换行符不匹配

PHP preg_match(.*)与过去的换行符不匹配,php,preg-match,Php,Preg Match,我在一个长文本列中有这些数据(因此保留换行符): 我试图匹配第1段到第3段。我正在使用以下代码: preg_match('/Para(.*)three/', $row['file'], $m); 这不会返回任何结果。如果我试图在段落的第一行内工作,请匹配: preg_match('/Para(.*)one/', $row['file'], $m); 然后代码工作,我得到正确的字符串返回。我在这里做错了什么?添加 例如: 使用s修饰符 preg_match('/Para(.*)three/s'

我在一个长文本列中有这些数据(因此保留换行符):

我试图匹配第1段到第3段。我正在使用以下代码:

preg_match('/Para(.*)three/', $row['file'], $m);
这不会返回任何结果。如果我试图在段落的第一行内工作,请匹配:

preg_match('/Para(.*)one/', $row['file'], $m);
然后代码工作,我得到正确的字符串返回。我在这里做错了什么?

添加

例如:


使用
s
修饰符

preg_match('/Para(.*)three/s', $row['file'], $m);

尝试将正则表达式设置为dot all(末尾的额外“s”参数),使其包含换行符:

preg_match('/Para(.*)three/s', $row['file'], $m);

如果开始时不喜欢
/
,请使用


呵呵@塔苏文赢了我!Win的s修饰符对于任何想知道这与公认答案之间的差异的人(
s
修饰符),
s
修饰符使
匹配换行符以及所有其他字符(默认情况下不包括它们),而
m
控制
^
$
匹配的方式;强制它们只匹配整个字符串的开头和结尾(几乎-另请参见
D
),而不是每行的开头和结尾。警告:
/s
修饰符是贪婪的。如果文本中有多个“三”,则匹配将包括所有文本,直到最后一次出现为止。使用
/sU
来防止这种情况(注意大写的U)。@FrankForte实际上不是一个修饰语问题:
*
重复本身就是贪婪的。一个更好的方法是打一个问号让它变懒:
/Para(.*)三个/s
。另外,
/U
修饰符不会取消贪婪,而是将其反转:
*
变为懒惰,
*?
变为贪婪。在操作代码上不是问题,但它可以在更复杂的正则表达式中触发奇怪的错误。
preg_match('/Para(.*)three/s', $row['file'], $m);
preg_match('/Para(.*)three/s', $row['file'], $m);
$m = Pattern::of('Para(.*)three')->match($row['file'])->first();