我正在尝试创建一个简单的PHP脚本,该脚本从字符串中检索信息并将其放入数组中。我已经在多捕获正则表达式的一些网站上查看了一个模式,但似乎无法获得我正在寻找的输出
目前这是我的剧本。
$input = "username: jack number: 20";
//$input = file_get_contents("test.txt");
preg_match_all("/username: ([^\s]+)|number: ([^\s]+)/", $input, $data);
var_dump($data);
产生此输出:
0 =>
array (size=2)
0 => string 'username: jack' (length=14)
1 => string 'number: 20' (length=10)
1 =>
array (size=2)
0 => string 'jack' (length=4)
1 => string '' (length=0)
2 =>
array (size=2)
0 => string '' (length=0)
1 => string '20' (length=2)
我希望将数据转换为以下形式:
0 =>
array (size=x)
0 => string 'jack'
1 =>
array (size=x)
0 => string '20'
或两个不同的数组,其中键对应于相同的用户/数字组合
答案 0 :(得分:2)
您可以使用match-reset \K
:
preg_match_all('/\b(?:username|number):\h*\K\S+/', $input, $data);
print_r($data[0]);
Array
(
[0] => jack
[1] => 20
)
RegEx分手:
\b => a word boundary
(?:username|number) => matches username or number. (?:..) is non-capturing group
:\h* => matches a colon followed optional horizontal spaces
\K => match reset, causes regex engine to forget matched data
\S+ => match 1 or more non-space chars
否则,您可以使用捕获群组来获取匹配的数据,如下所示:
preg_match_all('/\b(?:username|number):\h*(\S+)/', $input, $data);
print_r($data[1]);
Array
(
[0] => jack
[1] => 20
)
答案 1 :(得分:0)