[英]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.