编辑:原始问题不在主题范围内,请进行修改以纠正问题。
我正在学习一些有关Elixir的编码挑战,并遇到了将英语翻译成Pig Latin on Wikipedia的问题。
我开始为不同的规则制定正则表达式,并意识到将所有内容合而为一并不难。玩了一点之后,我到达了以下内容,以一次匹配并转换一个单词。
Elixir应该使用与PCRE兼容的正则表达式,但是我还没有办法找到一种方法来使\u
one character to upper和\L
All characters to lower在elixir中工作字符串替换。我已经尝试了几种将替换字符串工作的方法,但是完全没有找到一种可行的方法。
有没有办法在长生不老药String中使用纯正则表达式。替换它是否只需用常规代码处理其余部分?
iex(21)> regex = ~r/(^(?:[aeiouAEIOU]|[XYxy][^aeiouy])(?:.*))|(?:^([A-Z][^aeiou]*(?:u)?)([aeiouy].*))|(?:^([^aeiou]*(?:u)?)([aeiouy].*))/
~r/(^(?:[aeiouAEIOU]|[XYxy][^aeiouy])(?:.*))|(?:^([A-Z][^aeiou]*(?:u)?)([aeiouy].*))|(?:^([^aeiou]*(?:u)?)([aeiouy].*))/
iex(22)> String.replace("Squirl",regex,"\\1\\u\\3\\L2\\5\\4ay")
"\\uirl\\L2ay"
iex(23)> String.replace("Squirl","\\1\\3\\2\\5\\4ay")
"irlSquay"
以下原始问题:
请注意,挑战是我完全说出以元音开头的单词,只是在结尾加上“ ay”。其他一些说明是“ way”或“ yay”
Powershell版本:
[Regex]$reg = '(^(?:[aeiou]|[xy][^aeiouy])(?:.*))|(?:^([^aeiou]*(?:u)?)([aeiouy].*))'
'powershell' -replace $reg,('$1$3$2' + 'ay')
Elixir版本:
regex = ~r/(^(?:[aeiou]|[xy][^aeiouy])(?:.*))|(?:^([^aeiou]*(?:u)?)([aeiouy].*))/i
String.replace("elixir","\\1\\3\\2ay")
这似乎很容易,我是否缺少这种情况?