Regex 比赛中的一部分。如何找到所有?

Regex 比赛中的一部分。如何找到所有?,regex,preg-match,preg-match-all,Regex,Preg Match,Preg Match All,我正在查找文档中的所有变量,并发现不需要的特性。在: $from = "(some txt)$aaa$bbb(another txt)"; preg_match_all("/[\$]([a-zA-Z_]{1})([a-zA-Z0-9_]*?)(\W)/", $from, $matches); 脚本仅返回$aaa作为匹配项,但不返回$bbb。我不知道怎么解决这个问题。请帮助:)这是因为您的正则表达式末尾的none-word标记使您的正则表达式与$aaa$匹配(《代码>\W与最后的$)匹配。要拒绝

我正在查找文档中的所有变量,并发现不需要的特性。在:

$from = "(some txt)$aaa$bbb(another txt)";
preg_match_all("/[\$]([a-zA-Z_]{1})([a-zA-Z0-9_]*?)(\W)/", $from, $matches);

脚本仅返回$aaa作为匹配项,但不返回$bbb。我不知道怎么解决这个问题。请帮助:)

这是因为您的正则表达式末尾的none-word标记使您的正则表达式与
$aaa$
匹配(《代码>\W与最后的$)匹配。要拒绝此类行为,您可以将
\W
放在积极的前瞻中。您还可以将
$
\W
之间的所有正则表达式放在一个组中:

/\$([a-zA-Z_][a-zA-Z0-9_]*)(?=\W)/

请参阅演示

oO我不知道如何捕获组。我以为这只是为了澄清代码。谢谢;)