簡體   English   中英

適用於模式的PHP正則表達式,但不包含某些字符串

[英]PHP regex for pattern, but not preceeded by some string

我有一個PHP應用程序,需要按任何順序解析逗號分隔的項目列表。 不幸的是,一些關鍵字重疊:

$mylist = 'foo,wind,unwind';

$contains_foo = preg_match('/foo/i', $mylist);
$contains_bar = preg_match('/bar/i', $mylist);
$contains_unwind = preg_match('/unwind/i', $mylist);
$contains_wind = preg_match('/wind/i', $mylist); # BUG!

如果沒有以“ un”開頭的正則表達式,我該如何制作僅與“ wind”相匹配的正則表達式?

請注意,我無法匹配/,wind/ ,因為它可能是列表中的第一項。

我可能可以做/^wind/ || /,wind/ /^wind/ || /,wind/但希望將其放在單個正則表達式中。

如果沒有以“ un”開頭的正則表達式,我該如何制作僅與“ wind”相匹配的正則表達式?

您可以在后面使用否定式

$contains_wind = preg_match('/(?<!un)wind/i', $mylist); 

這里(?<!un)負的反向預搜索 ,這意味着如果字失敗比賽wind是由前面un


在另一個例子中,您還可以使用單詞邊界

$contains_wind = preg_match('/\bwind\b/i', $mylist);

在這里,斷言\\b被稱為單詞邊界 ,僅當它被非單詞字符或錨點包圍時,它才會匹配wind

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM