<?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',
),
)
答案 0 :(得分:3)
这就是preg_match_all()
和捕获小组的工作方式。
如果您只想要全名,则需要将其减少到您需要的名称或使用非捕获括号。
例如:
preg_match_all("/(@\w+\s\w+)/", $string, $matches);
请注意,默认情况下:
对结果进行排序,以便$ matches [0]是一个完整模式的数组 匹配,$ matches 1是由第一个匹配的字符串数组 带括号的子模式,依此类推。
所以你真的不需要在你的情况下捕捉任何东西:
preg_match_all("/@\w+\s\w+/", $string, $matches);
答案 1 :(得分:2)
使用此表达式(将捕获组删除到空格)
/@\w+\s\w+/
在此测试:
https://regex101.com/r/cL5xH2/2
结果:
[
0 => '@Name Surname',
1 => '@Secondname Surname',
]