regex - 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
有谁知道我可能会错过什么?
解决方案
Regex.run(~r/#{@consonant_regex}/, "trouble")
对我来说也失败了。如果你把它展开,它看起来像:
Regex.run(~r/[^([aeiou]|(?<=.)(?<![aeiou])y)]/, "trouble")
我认为您的错误是由字面上匹配的一些()
括号字符引起的[]
,而不是用于分组。
但是,这对我有用,也许您可以从更简单的开始并将其扩展到您需要的内容:
iex(1)> Regex.run(~r/[aeiou][^aeiou]/, "trouble")
["ub"]
推荐阅读
- mongodb - 如何限制一个分片上的 MongoDB 写操作
- python - imap 无序值访问
- java - 如何访问 Spring Boot 默认错误响应的 HTTP 响应内容?
- python - 如何使用 while 循环访问列表的所有第二个元素,这些元素是存储在字典中的值?
- android - 缺少在文本视图之外显示的文本
- python - 禁用一个按钮直到另一个按钮被按下?
- angular - 可以将 mat-checkbox 用作 mat-label 吗?
- linux - Debian Buster:'E:无法找到软件包'
- python - 从 pandas 数据框按列创建一个平面列表
- python - Python 模拟的副作用是返回一个模拟对象而不是值