用php正则表达式查找包含word的整行

用php正则表达式查找包含word的整行,php,regex,line,preg-match-all,Php,Regex,Line,Preg Match All,我想在文本中搜索“会话”一词。但我想检索这个词出现的整行文字。到目前为止,我已经想出了这个 $pattern="[^\\n]*session[^\\n]*"; preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE); 但我得到了一个错误“未知修饰符'*'。您知道如何生成这样的正则表达式吗?您的正则表达式缺少分隔符,因此出现错误: $pattern = "/[^\\n]*session[^\\n]*/"; // or, w

我想在文本中搜索“会话”一词。但我想检索这个词出现的整行文字。到目前为止,我已经想出了这个

$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);

但我得到了一个错误“未知修饰符'*'。您知道如何生成这样的正则表达式吗?

您的正则表达式缺少分隔符,因此出现错误:

$pattern = "/[^\\n]*session[^\\n]*/";
// or, with single quotes, you don't need to escape \n
$pattern = '/[^\n]*session[^\n]*/';
如果我正确地解释了您的意图,那么您正在尝试匹配零行或多行非新行,后面是“会话”,后面是零行或多行非新行

更简单(可能更正确)的模式是:

$pattern = '/^.*\bsession\b.*$/m';
也就是说,从一行的开头(
^
)匹配任何字符(
*
)中的0个或多个,单词边界(
\b
),单词“session”,另一个单词边界,另一系列字符,以及行的结尾(
$
),匹配多行(
m
修饰符)

您已经用
[^\n]
重新创建了锚(
^
$
),这有点不明显,但遗漏了单词边界,这可能是您匹配时不需要的。也就是说,你的会匹配一行包含“会话”或“财产”或“困扰”或“abcsessionxyz”,而我的不会;如果不需要这样做,您可以删除
\b
的/^.*会话.$/m,我们的模式或多或少是等效的

这是一个概念证明,找到包含单词的整个中间线:

<?php

$lines ="This is a test
of skipping the word obsessions but
finding the word session in a
bunch of lines of text";

$pattern = "/^.*\bsession\b.*$/m";

$matches = array();
preg_match($pattern, $lines, $matches);

var_dump($matches);

你的模式可能会找到“跳过困扰这个词”这句话。谢谢,我有一个问题\b(边界)到底是什么?据我所知,这不是一个空白。文字边界是被描述的,但基本上是两个字符之间的任何地方,其中一个是文字字符(
[a-zA-Z0-9_]),另一个不是。值得注意的是,我们的模式并不完全相同;你的答案会和我的答案相匹配,而我的答案不会。BorutFlis更新了我的答案,以说明为什么单词边界很重要。