Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么正则表达式用于从wpa_supplicant.conf获取网络对象?_Android_Regex_Wpa Supplicant - Fatal编程技术网

Android 什么正则表达式用于从wpa_supplicant.conf获取网络对象?

Android 什么正则表达式用于从wpa_supplicant.conf获取网络对象?,android,regex,wpa-supplicant,Android,Regex,Wpa Supplicant,我有以下结构的文件: ctrl_interface=/data/misc/wifi/sockets driver_param=use_p2p_group_interface=1 update_config=1 device_name=P580_ROW manufacturer=LENOVO model_name=Lenovo model_number=Lenov serial_number=hjhjh7 device_type=10-0050F204-5 os_version=01020300

我有以下结构的文件:

ctrl_interface=/data/misc/wifi/sockets
driver_param=use_p2p_group_interface=1
update_config=1
device_name=P580_ROW
manufacturer=LENOVO
model_name=Lenovo 
model_number=Lenov
serial_number=hjhjh7
device_type=10-0050F204-5
os_version=01020300
config_methods=physical_display virtual_push_button
p2p_no_group_iface=1

network={
    ssid="test1"
    psk="154695"
    key_mgmt=WPA-PSK
    sim_slot="-1"
    imsi="none"
    priority=1
}

network={
    ssid="SSID2"
    psk="test123456"
    key_mgmt=WPA-PSK
    sim_slot="-1"
    imsi="none"
    priority=19
}
我想问一下,如何使用regex(Pattern和Matcher)或类似的Java语言获取具有可访问属性的网络对象(也可以是JSON)的数组列表

我试图使用该服务找到解决方案 但是没有运气获得具有可访问属性的对象


非常感谢你的建议

下面是一个工作示例。试试看

public class Test {

    private static final String REGEXP = "network=\\{\\n\\s*ssid=\"(?<ssid>.*)\"\\n\\s*psk=\"(?<psk>.*)\"\\n\\s*key_mgmt=(?<keymgmt>.*)\\n\\s*sim_slot=\"(?<simslot>.*)\"\\n\\s*imsi=\"(?<imsi>.*)\"\\n\\s*priority=(?<priority>.*)\\n}";
    private static final String DATA = "ctrl_interface=/data/misc/wifi/sockets\n" +
            "driver_param=use_p2p_group_interface=1\n" +
            "update_config=1\n" +
            "device_name=P580_ROW\n" +
            "manufacturer=LENOVO\n" +
            "model_name=Lenovo \n" +
            "model_number=Lenov\n" +
            "serial_number=hjhjh7\n" +
            "device_type=10-0050F204-5\n" +
            "os_version=01020300\n" +
            "config_methods=physical_display virtual_push_button\n" +
            "p2p_no_group_iface=1\n" +
            "\n" +
            "network={\n" +
            "    ssid=\"test1\"\n" +
            "    psk=\"154695\"\n" +
            "    key_mgmt=WPA-PSK\n" +
            "    sim_slot=\"-1\"\n" +
            "    imsi=\"none\"\n" +
            "    priority=1\n" +
            "}\n" +
            "\n" +
            "network={\n" +
            "    ssid=\"SSID2\"\n" +
            "    psk=\"test123456\"\n" +
            "    key_mgmt=WPA-PSK\n" +
            "    sim_slot=\"-1\"\n" +
            "    imsi=\"none\"\n" +
            "    priority=19\n" +
            "}";

    public static void main(String[] args){
        final Pattern pattern = Pattern.compile(REGEXP);
        final Matcher matcher = pattern.matcher(DATA);

        while(matcher.find()){
            System.out.println("New network");
            System.out.println("-----------");
            System.out.println("SSID: "+matcher.group("ssid"));
            System.out.println("PSK: "+matcher.group("psk"));
            System.out.println("KEY MGMT: "+matcher.group("keymgmt"));
            System.out.println("SIM SLOT: "+matcher.group("simslot"));
            System.out.println("IMSI: "+matcher.group("imsi"));
            System.out.println("PRIORITY: "+matcher.group("priority"));
        }
    }
}
公共类测试{
私有静态最终字符串REGEXP=“network=\\{\\n\\s*ssid=\”(?*)\“\\n\\s*psk=\”(?*)\“\\n\\s*key\u mgmt=(?*)\\n\\s*sim\u slot=\”(?*)\“\\n\\s*imsi=\”(?*)\\\n\\s*优先级=(?*)\\n}”;
私有静态最终字符串DATA=“ctrl\u接口=/DATA/misc/wifi/sockets\n”+
“驱动程序\u参数=使用\u p2p\u组\u接口=1\n”+
“更新配置=1\n”+
“设备名称=P580\u行\n”+
“制造商=联想\n”+
“型号\名称=联想\n”+
“型号=列诺夫\n”+
“序列号=HJH7\n”+
“设备类型=10-0050F204-5\n”+
“os_版本=01020300\n”+
“配置方法=物理显示虚拟按钮\n”+
“p2p\u否\u组\u iface=1\n”+
“\n”+
“网络={\n”+
“ssid=\“test1\”\n”+
“psk=\“154695\”\n”+
“密钥管理=WPA-PSK\n”+
“sim\U插槽=\”-1\“\n”+
“imsi=\”无\“\n”+
“优先级=1\n”+
“}\n”+
“\n”+
“网络={\n”+
“ssid=\“SSID2\”\n”+
“psk=\“test123456\”\n”+
“密钥管理=WPA-PSK\n”+
“sim\U插槽=\”-1\“\n”+
“imsi=\”无\“\n”+
“优先级=19\n”+
"}";
公共静态void main(字符串[]args){
最终模式=Pattern.compile(REGEXP);
最终匹配器匹配器=pattern.Matcher(数据);
while(matcher.find()){
System.out.println(“新网络”);
System.out.println(“--------------”;
System.out.println(“SSID:+matcher.group(“SSID”);
System.out.println(“PSK:+matcher.group”(“PSK”);
System.out.println(“密钥管理:“+matcher.group”(“密钥管理”);
System.out.println(“SIM插槽:+matcher.group(“simslot”);
System.out.println(“IMSI:+matcher.group(“IMSI”);
System.out.println(“优先级:”+matcher.group(“优先级”);
}
}
}

我的RegExp效率不高。我认为这种方法是肮脏的,应该有比这种更好的解决方案。(工作区:)

如果您不知道属性的名称及其计数,您可以使用基于
\G
运算符的正则表达式:

String str = "<<YOUR_STRING>>";
Pattern ptrn = Pattern.compile("(?<new>network=\\{|(?!^)\\G)\\s*(?<key>\\w+)=\"?(?<value>[^\"\n]+)\"?");
Matcher matcher = ptrn.matcher(str);
int count = 1;
while (matcher.find()) {
    if (matcher.group("new") != null && matcher.group("new").length() > 0) {
        System.out.println("New Network: " + count);
        count += 1;
    }
    System.out.println(matcher.group("key") + ":\"" + matcher.group("value").trim() + "\"");
}
String str=”“;
Pattern ptrn=Pattern.compile((?network=\{{124;(?!^)\\ G)\\s*(?\\w+)=\“?(?[^\“\n]+)\”?”;
Matcher Matcher=ptrn.Matcher(str);
整数计数=1;
while(matcher.find()){
if(matcher.group(“new”)!=null和&matcher.group(“new”).length()>0){
System.out.println(“新网络:+count”);
计数+=1;
}
System.out.println(matcher.group(“key”)+:\“”+matcher.group(“value”).trim()+“\”);
}

正则表达式-
(?network=\{{124;(?!^)\ G)\s*(?\w+=“?(?[^”\n]+)”?
-匹配:

  • (?network=\{{{}(?!^)\G)
    -
    network={
    或上一次成功匹配的结束(组“新建”)
  • \s*
    -可选空白
  • (?\w+)
    -1个或多个字母数字符号(组“键”)
  • =”?
    -文字
    =
    和可选的
  • (?[^”\n]+)
    -1个或多个字符,而不是
    和换行符(组“值”)
  • <代码>“?-可选

您只需要
网络
节点或其他东西,如
配置方法、型号名称等
?只需要网络节点。