首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php解析智能搜索

使用php解析智能搜索
EN

Stack Overflow用户
提问于 2020-08-15 16:34:40
回答 1查看 60关注 0票数 1

我正在使用PHP和jquery构建一个UI,允许用户输入一个字符串,然后搜索apt search

我想要做的是分离(使用php) packaga namethe architecture (就在/之后)和description of the package (就在包和体系结构的线下),这样我就可以将这些数据压缩到JSON集合中并返回给jQuery。

我正在执行以下命令:

代码语言:javascript
复制
$data=shell_exec("sudo apt search $searchString")

我可以在/上使用but获得包名和体系结构,但不知道如何获得下面的行

下面是针对php的搜索的示例输出

代码语言:javascript
复制
wwwconfig-common/bionic 0.3.0 all
  Debian web auto configuration

xine-ui/bionic 0.99.9-1.3 amd64
  the xine video player, user interface

xjed/bionic 1:0.99.19-7 amd64
  editor for programmers (x11 version)

xmlsysd/bionic 2.6.0-0ubuntu4 amd64
  wulfware daemon to extract data from cluster nodes

yasat/bionic 848-1ubuntu1 all
  simple stupid audit tool

yhsm-validation-server/bionic 1.2.0-1 all
  Validation server using YubiHSM

yrmcds/bionic 1.1.8-1.1 amd64
  memcached compatible KVS with master/slave replication

yubikey-server-c/bionic 0.5-1build3 amd64
  Yubikey validation server

yubikey-val/bionic 2.38-2 all
  One-Time Password (OTP) validation server for YubiKey tokens

zabbix-frontend-php/bionic 1:3.0.12+dfsg-1 all
  network monitoring solution - PHP front-end

zendframework/bionic 1.12.20+dfsg-1ubuntu1 all
  powerful PHP framework

zendframework-bin/bionic 1.12.20+dfsg-1ubuntu1 all
  binary scripts for zendframework

谢谢你的帮助!

更新:

我可以使用爆炸"/“获得包名和体系结构,但我不知道如何得到下面的一行。我想我能找到一个好办法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-15 17:10:12

这里有几种方法可以做到。

一种是使用array_map (您可以使用普通的foreach ),另一种是使用regex的方式。

代码语言:javascript
复制
<?php
$str = 'wwwconfig-common/bionic 0.3.0 all
  Debian web auto configuration

...';
  
  
$packages = array_map(function($item) {
    
    $item = array_map('trim', explode("\n", trim($item)));
    $line = explode(" ", $item[0]);
    $line[0] = explode("/", $item[0]);
    
    return [
        'package' => $line[0][0],
        'distro' => $line[0][1],
        'version' => $line[1],  
        'arch' => $line[2], 
        'desc' => $item[1]
    ];
}, explode("\n\r", $str));

或者用regex

代码语言:javascript
复制
preg_match_all('#(?<package>.*?)/(?<distro>.*?) (?<version>.*?) (?<arch>.*?)\n  (?<desc>.*?)\n\r#', $str, $packages);
$result = [];
foreach ($packages['package'] as $key => $value) {
    $result[] =  [
        'package' => $packages['package'][$key],
        'distro' =>  $packages['distro'][$key],
        'version' =>  $packages['version'][$key],
        'arch' =>  $packages['arch'][$key],
        'desc' =>  $packages['desc'][$key]
    ];
}

print_r($result);

两者产生的结果是相同的:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [package] => wwwconfig-common
            [distro] => bionic
            [version] => 0.3.0
            [arch] => all
            [desc] => Debian web auto configuration
        )

    [1] => Array
        (
            [package] => xine-ui
            [distro] => bionic
            [version] => 0.99.9-1.3
            [arch] => amd64
            [desc] => the xine video player, user interface
        )

    [2] => Array
        (
            [package] => xjed
            [distro] => bionic
            [version] => 1:0.99.19-7
            [arch] => amd64
            [desc] => editor for programmers (x11 version)
        )

    [3] => Array
        (
            [package] => xmlsysd
            [distro] => bionic
            [version] => 2.6.0-0ubuntu4
            [arch] => amd64
            [desc] => wulfware daemon to extract data from cluster nodes
        )

    [4] => Array
        (
            [package] => yasat
            [distro] => bionic
            [version] => 848-1ubuntu1
            [arch] => all
            [desc] => simple stupid audit tool
        )

    [5] => Array
        (
            [package] => yhsm-validation-server
            [distro] => bionic
            [version] => 1.2.0-1
            [arch] => all
            [desc] => Validation server using YubiHSM
        )

    [6] => Array
        (
            [package] => yrmcds
            [distro] => bionic
            [version] => 1.1.8-1.1
            [arch] => amd64
            [desc] => memcached compatible KVS with master/slave replication
        )

    [7] => Array
        (
            [package] => yubikey-server-c
            [distro] => bionic
            [version] => 0.5-1build3
            [arch] => amd64
            [desc] => Yubikey validation server
        )

    [8] => Array
        (
            [package] => yubikey-val
            [distro] => bionic
            [version] => 2.38-2
            [arch] => all
            [desc] => One-Time Password (OTP) validation server for YubiKey tokens
        )

    [9] => Array
        (
            [package] => zabbix-frontend-php
            [distro] => bionic
            [version] => 1:3.0.12+dfsg-1
            [arch] => all
            [desc] => network monitoring solution - PHP front-end
        )

    [10] => Array
        (
            [package] => zendframework
            [distro] => bionic
            [version] => 1.12.20+dfsg-1ubuntu1
            [arch] => all
            [desc] => powerful PHP framework
        )

)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63428405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档