Php 从字符串开始时,从字符串中获取所有片段@
当word以Php 从字符串开始时,从字符串中获取所有片段@,php,regex,Php,Regex,当word以@开头,然后只包含alnym0-9a-z字符时,我需要获取字符串中的所有匹配项。例如,从这个字符串@ww@eex@vx@ss@aa assadd@sfsd我需要这些东西: @ss @aa @sfsd 我正在努力: $str = "@ww@ee x@@vx @ss @aa assadd @sfsd"; preg_match_all("#(^|\s)\@([0-9a-z]+)(\s+|$)#ui", $str, $matches); var_dump( $mat
@
开头,然后只包含alnym0-9a-z
字符时,我需要获取字符串中的所有匹配项。例如,从这个字符串@ww@eex@vx@ss@aa assadd@sfsd
我需要这些东西:
@ss
@aa
@sfsd
我正在努力:
$str = "@ww@ee x@@vx @ss @aa assadd @sfsd";
preg_match_all("#(^|\s)\@([0-9a-z]+)(\s+|$)#ui", $str, $matches);
var_dump( $matches );
但这只给出了@ss
@sfsd
和跳过@aa
什么样的模式才是正确的呢?您可以使用以下正则表达式
'~\B(?<!@)@([0-9a-z]+)(?:\s|$)~iu'
“~\B(?我想你需要的就是。再见,非常感谢你,这个works@WiktorStribiżew请将此作为一个答案发布,并详细说明其工作原理。这将非常有帮助。好的,让我发布解释。
$re = '~\B(?<!@)@([0-9a-z]+)(?:\s|$)~ui';
$str = "@ww@ee x@@vx @ss @aa assadd @sfsd";
preg_match_all($re, $str, $matches);
print_r($matches);