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

标签 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
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
}

我想问一下,如何使用正则表达式(Pattern 和 Matcher)或 Java 中类似的东西获取具有可访问属性的网络对象的数组列表(但也可以是 JSON)?

我尝试使用该服务寻找解决方案 http://txt2re.com/ 但是没有运气获得具有可访问属性的对象。

非常感谢您的任何建议。

最佳答案

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

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() + "\"");
}

参见 IDEONE demo

正则表达式 - (?<new>network=\{|(?!^)\G)\s*(?<key>\w+)="?(?<value>[^"\n]+)"? - 比赛:

  • (?<new>network=\{|(?!^)\G) - network={或上一次成功匹配的结束(组"new")
  • \s* - 可选空格
  • (?<key>\w+) - 1 个或多个字母数字符号(组“键”)
  • ="? - 文字 =和一个可选的 "
  • (?<value>[^"\n]+) - 除 " 以外的 1 个或多个字符和一个换行符(组“值”)
  • "? - 一个可选的 "

关于android - 什么正则表达式用于从 wpa_supplicant.conf 获取网络对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444452/

相关文章:

android - 如何在 Android 中永久禁用 Wi-Fi、蓝牙和 USB 大容量存储

java - 安卓开发: Read outlook emails in own app activity

php - 使用正则表达式在字符串中查找变量

regex - grep --ignore-case --only

Python:删除包括一行中某个字符之后的所有内容

linux - 如何在没有 MAC 地址的情况下通过 WiFi Direct p2p_connect 到设备? (树莓派和安卓)

windows - Windows 上的 HOSTAPD/WPA_SUPPLICNAT

c - 获取已连接 WiFi 网络的信号电平

android - 如何以编程方式关闭 Android Speech To Text 对话框

android - 如何修复 ProGuard/R8 导致的崩溃?