我想在文本中搜索單詞「會話」。但是我想檢索這個詞出現的整個行。到目前爲止,我已經提出了這個問題。用php正則表達式查找包含單詞的整行
$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);
但是我得到一個錯誤「Unknown modifier'*'」。任何想法如何做出這樣的正則表達式?
我想在文本中搜索單詞「會話」。但是我想檢索這個詞出現的整個行。到目前爲止,我已經提出了這個問題。用php正則表達式查找包含單詞的整行
$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);
但是我得到一個錯誤「Unknown modifier'*'」。任何想法如何做出這樣的正則表達式?
你的正則表達式中缺少分隔符,因此你的錯誤:
$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]
這是有點不明顯改造了錨(^
和$
),但錯過了字邊界,它爲你匹配any word that contains the word "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"
}
你的模式會發現跳過字線」 「但是」。
謝謝,我有一個問題是什麼?b(邊界)真的嗎?這不是一個白色空間,我知道的不多。 –
單詞邊界在[here](http://www.regular-expressions.info/wordboundaries.html)中有描述,但基本上兩個字符之間的任意位置,其中一個是單詞字符('[a-zA-Z0-9_] ),一個不是。值得注意的是我們的模式並不相同,你的將匹配「blahsessionblah」,我的不會。 – meagar
@BorutFlis更新了我的答案,以證明爲什麼字邊界很重要。 – meagar