<?php
$string = "String is '@Name Surname test @Secondname Surname tomas poas tomas'"
preg_match_all("/@('w+)('s)('w+)/", $string, $matches);
我想要提取:
[
0 => '@Name Surname',
1 => '@Secondname Surname',
]
我得到什么;
array (
0 =>
array (
0 => '@Name Surname',
1 => '@Secondname Surname',
),
1 =>
array (
0 => 'Name',
1 => 'Secondname',
),
2 =>
array (
0 => ' ',
1 => ' ',
),
3 =>
array (
0 => 'Surname',
1 => 'Surname',
),
)
这就是
preg_match_all()
和捕获组的工作方式。
如果您只需要整个名称,则需要将其减少到您只需要的内容或使用非捕获括号。
例如:
preg_match_all("/(@'w+'s'w+)/", $string, $matches);
请注意,默认情况下:
对结果进行排序,使 $matches[0] 是完整模式的数组 匹配,$matches 1 是与第一个匹配的字符串数组 括号中的子模式,依此类推。
因此,您真的不需要捕获任何内容:
preg_match_all("/@'w+'s'w+/", $string, $matches);
使用此表达式(将捕获组删除到空格(
/@'w+'s'w+/
在这里测试它:
https://regex101.com/r/cL5xH2/2
结果:
[
0 => '@Name Surname',
1 => '@Secondname Surname',
]