2013-03-25 106 views
5

我试图匹配所有用{}包起来的单词,但不包含带有“_loop”的单词。我无法看到我的注册表达错误。PHP正则表达式负向前瞻

$content = '<h1>{prim_practice_name}</h1><p>{prim_content}</p><p>Our Locations Are {location_loop}{name} - {state}<br/>{/location_loop}</p>'; 
$pattern = '/\{(\w*(?!\_loop))\}/'; 
+0

你正在寻找一个回顾后'<'?!。 – mario 2013-03-25 23:55:09

回答

3

这是因为\ W *您检查之前“吃”停止词“_loop”,以防止你应该检查这个词第一次(之前\ W *),如下所示:

$pattern = '/\{((?!\w*_loop\})\w*)\}/'; 

,或者你可以使用一个?< !

$pattern = '/\{(\w*(?<!_loop))\}/';