使用php正则表达式查找包含单词的整行

Bor*_*lis 2 php regex line preg-match-all

我想在文本中搜索单词"session".但我想检索出现这个词的整行.到目前为止,我已经想出了这个.

$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);
Run Code Online (Sandbox Code Playgroud)

但是我收到错误"Unknown modifier'*'".任何想法如何制作这样的正则表达式?

mea*_*gar 8

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

$pattern = "/[^\\n]*session[^\\n]*/";
// or, with single quotes, you don't need to escape \n
$pattern = '/[^\n]*session[^\n]*/';
Run Code Online (Sandbox Code Playgroud)

如果我正确地解释了您的意图,那么您尝试匹配零或多个不是换行符,然后是"会话",然后是零或多个换行.

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

$pattern = '/^.*\bsession\b.*$/m';
Run Code Online (Sandbox Code Playgroud)

也就是说,从line(^)开始匹配0或更多任何字符(.*),单词边界(\b),单词"session",另一个单词边界,另一个字符系列和行尾($),匹配多行(m修饰符).

你有点重新发明了一些不明显的锚点(^$)[^\n],但错过了单词边界,这可能是不可取的,因为你匹配任何包含单词"session"的单词.也就是说,你的将匹配包含"会话"或"所有权"或"强迫症"或"abcsessionxyz"的行,而我的不会; 如果不需要,你可以删除\b屈服/^.*session.*$/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);
Run Code Online (Sandbox Code Playgroud)

输出:

array(1) {
  [0]=>
  string(29) "finding the word session in a"
}
Run Code Online (Sandbox Code Playgroud)

你的模式会找到"跳过"强迫症"这一词的界限.