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


Find whole line that contains word with php regular expressions

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

$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]*/';

如果我正确解释了你的意图,你试图匹配零个或多个而不是换行符,然后是"session",然后是零个或更多,而不是换行符。

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

$pattern = '/^.*'bsession'b.*$/m';

也就是说,从一行的开始(^)匹配任意字符(.*)、单词边界('b)、单词"会话"、另一个单词边界、另一系列字符和行的结束($)中的0个或多个,在多行上匹配(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);

输出:

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

你的模式会找到"跳过痴迷这个词,但是"这句话。