Как преобразовать регулярное выражение Swift 5.7 обратно в строку?
Довольно просто преобразовать строку в регулярное выражение:
let regex = try! Regex("foo")
Но если я попытаюсь вернуть строку из регулярного выражения, вместоfoo
, я получаю что-то вроде:
_StringProcessing.Regex<_StringProcessing.AnyRegexOutput>(program: _StringProcessing.Regex<_StringProcessing.AnyRegexOutput>.Program)
Зеркала здесь мало помогают. Требуется несколько уровней отражения, чтобы добраться куда угодно:
let regexMirror = Mirror(reflecting: regex)
let program = regexMirror.children.first!.value // runtime type: Regex<AnyRegexOutput>.Program
let programMirror = Mirror(reflecting: program)
print(Array(programMirror.children))
[(label: Optional("tree"), value: _StringProcessing.DSLTree(root: _StringProcessing.DSLTree.Node.convertedRegexLiteral(_StringProcessing.DSLTree.Node.concatenation([_StringProcessing.DSLTree.Node.convertedRegexLiteral(_StringProcessing.DSLTree.Node.atom(_StringProcessing.DSLTree.Atom.char("f")), _StringProcessing.DSLTree._AST.ASTNode(ast: 「f」)), _StringProcessing.DSLTree.Node.convertedRegexLiteral(_StringProcessing.DSLTree.Node.atom(_StringProcessing.DSLTree.Atom.char("o")), _StringProcessing.DSLTree._AST.ASTNode(ast: 「o」)), _StringProcessing.DSLTree.Node.convertedRegexLiteral(_StringProcessing.DSLTree.Node.atom(_StringProcessing.DSLTree.Atom.char("o")), _StringProcessing.DSLTree._AST.ASTNode(ast: 「o」))]), _StringProcessing.DSLTree._AST.ASTNode(ast: (「f」,「o」,「o」))))), (label: Optional("compileOptions"), value: _StringProcessing._CompileOptions(rawValue: 0)), (label: Optional("_loweredProgramStorage"), value: nil)]
Это то, что создает впечатление разборчивости, но оно полно приватных типов и вещей, которые меня не особо волнуют.
Есть ли простой способ получить строковое представление регулярного выражения?