正则表达式检测字符串中的所有日语字符并将子字符串包装在标记中

时间:2014-01-22 02:09:04

标签: ruby-on-rails ruby regex

试图找出如何做一个正则表达式(或任何方法),以便做到以下几点:

在字符串中搜索日文字符(平假名,片假名和汉字)。

使用标记包装日语字符的不间断子字符串。例如もち和名前はBenさん会产生以下结果:

<span lang="ja">もち</span>
<span lang="ja">名前は</span>Ben<span lang="ja">さん</span>

这是否在字符串中全局。

1 个答案:

答案 0 :(得分:8)

我认为你应该可以使用:

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 应该涵盖所有汉字,但它可能包括日语中没有使用的汉字(对不起,自从我不得不与日语打交道已经有几十年了这个级别,我还是不懂日语。)

日语文本中可能出现的其他字符(例如)未被Hirigana,Katakana或Han / Kanji覆盖,因此您可能需要根据某些十六进制范围扩展字符类关于你正在处理的文本的确切性质以及你想对等异常值做些什么。