查找包含在PHP正则表达式字全线飘红(Find whole line that contains w

2019-08-16 16:57发布

我要搜索的文本字“会话”。 不过,我想检索出现这个字的整条生产线。 到目前为止,我想出了这一点。

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

但是,我得到一个错误“未知的修饰词‘*’”。 任何想法如何做出这样的正则表达式?

Answer 1:

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

$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 ),字“会话”,另一字边界,另一系列的字符,和行(结束$ ),匹配多行( m改性剂)。

你那种彻底改造了锚( ^$用) [^\n]这是有点不明显,但错过了字边界,这可能是不希望为你匹配包含单词的单词“会议“ 。 也就是说,你将匹配包含“会议”或“财产”或“成见”或“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"
}

你的模式会发现“跳过这个词,但走火入魔的”行了。



文章来源: Find whole line that contains word with php regular expressions