我可以使用 y 运算符在 Perl 中进行非一对一音译吗?
Perl 中的 y 运算符进行逐个字符的音译。例如,如果我们对字符串“foobar”执行 y/abc/dfg,我们会得到“foofdr”。但是,如果我想将“ā”音译为“ei”,将“ä”音译为“a:”,将“ō”音译为“יu”,将“o”音译为“ɒ”,该怎么办?
我尝试了以下代码行,但没有运气:(
y/āäōo/(ei)(a:)(әu)ɒ/
我们是否希望有解决此问题的方法?或者我是否必须重复使用 s 运算符并进行大量繁琐的替换?
提前感谢您的任何指导:)
The y operator in Perl does character-by-character transliteration. For example, if we do y/abc/dfg to the string "foobar", we get "foofdr". But what if I want to transliterate "ā" to "ei" and "ä" to "a:" and "ō" to "әu" and "o" to "ɒ".
I tried the following line of code but no luck:(
y/āäōo/(ei)(a:)(әu)ɒ/
Do we hopefully have a workaround for this problem? Or do I have to repeatedly use the s operator and do a lot of cumbersome substitutions?
Thanks in advance for any guidance :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在这种情况下,创建一个哈希并轻松地从键转到字符串。
如果您的密钥长度超过一个字符,则需要更改此设置,方法是按长度递减的顺序对密钥进行排序,并使用
( | | )
而不是[ ]
连接它们。In this case, create a hash and go from the keys to the strings easily.
You need to alter this if your keys are more than one character long by sorting the keys in order of decreasing length and joining them using
( | | )
instead of[ ]
.听起来您正在尝试执行类似于 Text::Unaccent:: 的操作PurePerl。
It sounds like you're trying to do something similar to Text::Unaccent::PurePerl.