首页 > 解决方案 > Elixir 正则表达式不匹配括号

问题描述

我正在尝试运行一些匹配元音和辅音(VC)的正则表达式。例如:“麻烦”-> 匹配“ub”。我有一些正则表达式:

@vowel_regex "([aeiou]|(?<=.)(?<![aeiou])y)"
@consonant_regex "[^#{@vowel_regex}]"

Regex.run(~r/#{@vowel_regex}#{@consonant_regex}/, word)

返回编译错误

** (Regex.CompileError) unmatched parentheses at position 59

我试过使用Regex.escape,但这不匹配任何东西

"#{@vowel_regex}#{@consonant_regex}"
|> Regex.escape
|> Regex.compile!
|> Regex.run("trouble")

iex(35)> nil

我已经使用 rubular 尝试了这个正则表达式,它按预期工作。https://rubular.com/r/lNuqIROWTXJjhp

有谁知道我可能会错过什么?

标签: regexelixir

解决方案


Regex.run(~r/#{@consonant_regex}/, "trouble")

对我来说也失败了。如果你把它展开,它看起来像:

Regex.run(~r/[^([aeiou]|(?<=.)(?<![aeiou])y)]/, "trouble")

我认为您的错误是由字面上匹配的一些()括号字符引起的[],而不是用于分组。

但是,这对我有用,也许您可​​以从更简单的开始并将其扩展到您需要的内容:

iex(1)> Regex.run(~r/[aeiou][^aeiou]/, "trouble")
["ub"]

推荐阅读