regex Swift软件包管理器支持正则表达式吗?

e0bqpujr  于 2023-03-04  发布在  Swift
关注(0)|答案(1)|浏览(134)

我正在Swift 5.7.1中使用Swift软件包管理器。我想使用正则表达式文字编译代码。例如,main.swift可以如下所示:

let message = "Hello, world"
print(message.replacing(/[aeiou]/, with: "[vowel]"))

我目前对结果不感兴趣,对汇编不感兴趣。
如果我在XCode中创建一个项目,它可以正常工作,但是,如果我在Swift Package Manager中尝试(使用swift build),它显然不能识别/[aeiou]/是正则表达式文字,相反,我会得到类似'/' is not a prefix unary operator的消息。
有什么方法可以让Swift Package Manager使用它吗?或者只是它还不受支持?

tzxcd3kk

tzxcd3kk1#

Swift 5.7的regex常量可以在Swift Package Manager中使用,但必须在Package.swift中显式启用。默认情况下,新语法是禁用的,因为它是一个破坏源代码的语言更改(由于注解语法和/操作符中现有的“/”使用)。
下面是一个示例性的Package.swift,它为所有的包目标设置了“-enable-bare-slash-regex”,我还包含了一些额外的设置,如果你正在努力完全采用Swift 5.7,你可能会需要这些设置:

// swift-tools-version: 5.7

import PackageDescription

let package = Package(
  name: "your-package-name",
  platforms: [...],
  dependencies: [...],
  targets: [
    .target(
      name: "FooBar",
      dependencies: []
    ),
    .testTarget(
      name: "FooBarTests",
      dependencies: [
        "FooBar",
      ]
    ),
  ]
)

for target in package.targets {
  target.swiftSettings = target.swiftSettings ?? []
  target.swiftSettings?.append(
    .unsafeFlags([
      "-Xfrontend", "-warn-concurrency",
      "-Xfrontend", "-enable-actor-data-race-checks",
      "-enable-bare-slash-regex",
    ])
  )
}

在未来的Swift版本中,一旦现有代码有时间过渡到Swift 5.7,正则表达式文本可能会默认启用。

相关问题