You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5.7 RegexBuilder匹配Wi-Fi设备仅开头有效问题求助

正则匹配Wi-Fi对应设备失败的解决方法

问题场景

通过终端命令networksetup -listnetworkserviceorder获取的网络服务报告示例如下:

An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)

(2) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)

(3) iPhone USB
(Hardware Port: iPhone USB, Device: en6)

(4) Thunderbolt Bridge
(Hardware Port: Thunderbolt Bridge, Device: bridge0)

(5) VPN (VPN2)
(Hardware Port: L2TP, Device: )

尝试用Swift 5.7的RegexBuilder编写正则匹配Wi-Fi对应的en1,代码如下:

let search = Regex {
    "Hardware Port: Wi-Fi, Device: "
    Capture {
        OneOrMore(.word)
    }
}

if let result = try? search.wholeMatch(in: info) {
    print("Device: \(result.1)")
}

但该正则仅在目标字符串位于文本开头时有效,其余情况返回nil;改用字面量正则语法:

let search = /Hardware Port: Wi-Fi, Device: (\w+)/

结果仍为nil,需要解决匹配失效问题。

解决方法

核心问题是使用了wholeMatch(in:)方法——这个方法要求整个输入字符串完全匹配正则表达式,但我们的目标只是匹配文本中的某一段子串。只需替换匹配方法并微调正则即可解决:

修正方案1:RegexBuilder版本

import RegexBuilder

let info = """
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)

(2) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)

(3) iPhone USB
(Hardware Port: iPhone USB, Device: en6)

(4) Thunderbolt Bridge
(Hardware Port: Thunderbolt Bridge, Device: bridge0)

(5) VPN (VPN2)
(Hardware Port: L2TP, Device: )
"""

let search = Regex {
    "Hardware Port: Wi-Fi, Device: "
    Capture {
        OneOrMore(.word)
    }
}

if let result = try? search.firstMatch(in: info) {
    print("Device: \(result.1)") // 输出 Device: en1
}

修正方案2:字面量正则版本

let search = /Hardware Port: Wi-Fi, Device: (\w+)/

if let result = try? search.firstMatch(in: info) {
    print("Device: \(result.1)") // 输出 Device: en1
}

额外优化:兼容设备为空的情况

如果需要处理设备字段为空的场景(比如示例中的VPN条目),可以调整正则允许捕获空内容:

// RegexBuilder版本
let search = Regex {
    "Hardware Port: Wi-Fi, Device: "
    Capture {
        ZeroOrMore(.word)
    }
}

// 字面量版本
let search = /Hardware Port: Wi-Fi, Device: (\w*)/

内容的提问来源于stack exchange,提问作者Hadi Sharghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:40:53