我有這個文本,我想搜索單詞「工作」,除了短語「在職培訓」或短語列表。 如果我用這個的preg_match http://regexr.com/3dlo7如何排除短語preg_match
我得到3個結果...但我想只有第1和第3
這是一個很好的工作,這是對在職培訓。幹得好
preg_match的任何想法?
我有這個文本,我想搜索單詞「工作」,除了短語「在職培訓」或短語列表。 如果我用這個的preg_match http://regexr.com/3dlo7如何排除短語preg_match
我得到3個結果...但我想只有第1和第3
這是一個很好的工作,這是對在職培訓。幹得好
preg_match的任何想法?
首先,當你要測試PHP正則表達式,不要使用被設計爲Javascript RegExr,您可以改用regex101.com或regex.larsolavtorvik.com
你可以設計你的模式是這樣的:
\bjob\b(?!(?<=\bon the job) training\b)
,如果你想排除其他情況:
\bjob\b(?!(?<=\bon the job) training\b|(?<=\bthe job) I hate\b)
你也可以使用一個(*SKIP)(*F)
模式(這使得子模式失敗並且強制已經匹配的字符被跳過),它可以更容易編寫但效率較低(由於模式在開始時具有交替的事實):
\b(?:on the job training\b(*SKIP)(*F)|the job I hate\b(*SKIP)(*F)|job\b)
您使用第一個字符識別技巧可以改善它一點對不感興趣的職位很快會失敗:
\b(?=[otj])(?:on the job training\b(*SKIP)(*F)|the job I hate\b(*SKIP)(*F)|job\b)
比我的完整得多,+1。 – Toto
如何使用lookaround:
$str = 'This is a good job and this is on the job training. Nice job';
preg_match_all('/(?<!on the)\bjob\b(?! training)/', $str, $m);
print_r($m);
輸出:
Array
(
[0] => Array
(
[0] => job
[1] => job
)
)
使用這個表達式: -
\bjob(?!\straining)\b
您的評論後,你也希望你的字前,以排除字下面,然後用正則表達式: -
\b(?<!Nice\s)job(?!\straining)\b // exclude Nice word
http://www.phpliveregex.com/p/g8h
(?<!Nice\s)job
比賽Nice
"job"
不是由一個"Nice "
之前,使用負回顧後。
差不多....我可以添加|我的單詞之後有單詞,但我不能在我的單詞之前添加排除單詞 – Michalis
如果您不理會尼斯單詞,請使用以下正則表達式: - ** \ b(?<!Nice \ s)作業(?!\ straining)\ b ** –
使用斷言http://php.net/manual/en/regexp嘗試.reference.assertions.php'(?<!)\ bjob \ b(?!訓練)' – Danijel