试图弄清楚如何使用正则表达式(或与此相关的任何方法)来最好地执行以下操作:
在字符串中搜索日语字符(平假名、片假名和汉字)。
用标签包裹不间断的日文字符子串。例如,もち 和名前はBenさん 会产生以下结果:
<span lang="ja">もち</span>
<span lang="ja">名前は</span>Ben<span lang="ja">さん</span>
在字符串中全局执行此操作。
最佳答案
我认为你应该能够使用:
gsub(/([\p{Hiragana}\p{Katakana}\p{Han}]+)/) { %Q{<span lang="ja">#{$1}</span>} }
例如:
'さ名前はBenさんx⽫⽬ㇰ'.gsub(/([\p{Hiragana}\p{Katakana}\p{Han}]+)/) { %Q{<span lang="ja">#{$1}</span>} }
产生:
<span lang="ja">さ名前は</span>Ben<span lang="ja">さん</span>x<span lang="ja">⽫⽬ㇰ</span>
Han 应该涵盖所有的汉字,但它也可能包括日语中不使用的汉字(抱歉,自从我不得不在这个水平我还不会日语)。
还有其他字符(例如 ㋀
)可能会出现在平假名、片假名或汉字/汉字未涵盖的日文文本中,因此您可能需要使用一些扩展字符类十六进制范围取决于您正在处理的文本的确切性质以及您想要对 ㋀
等异常值执行的操作。
关于ruby-on-rails - 正则表达式检测字符串中的所有日语字符并将子字符串包装在标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272853/