我要搜索的文本字“会话”。 不过,我想检索出现这个字的整条生产线。 到目前为止,我想出了这一点。
$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);
但是,我得到一个错误“未知的修饰词‘*’”。 任何想法如何做出这样的正则表达式?
我要搜索的文本字“会话”。 不过,我想检索出现这个字的整条生产线。 到目前为止,我想出了这一点。
$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
),字“会话”,另一字边界,另一系列的字符,和行(结束$
),匹配多行( 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"
}
你的模式会发现“跳过这个词,但走火入魔的”行了。