PHP Regexp负向前瞻

use*_*258 7 php regex-negation

我正在尝试匹配用{}包裹的所有单词而不是带有"_loop"的单词.我无法看到我的reg表达式出错的地方.

 $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))\}/';
Run Code Online (Sandbox Code Playgroud)

ole*_*ole 6

发生这种情况是因为在检查之前\ w*"吃掉"停止的单词"_loop",以防止您首先检查单词(在\ w*之前),如下所示:

$pattern = '/\{((?!\w*_loop\})\w*)\}/';
Run Code Online (Sandbox Code Playgroud)

或者您可以使用?< !::

$pattern = '/\{(\w*(?<!_loop))\}/';
Run Code Online (Sandbox Code Playgroud)