正则表达式将英语单词计算为单个字符在亚洲单词的字数内

时间:2011-01-19 00:44:54

标签: regex count

需要一些正则表达式绝地大师的帮助:

如果我有一串mb字符(特别是日语,韩语或中文),其中包含英文单词,我想算一下:

  • 每个字符为1的亚洲字符
  • 英语“单词”(不需要字典检查 - 只是一串连续的英文字母)作为单个字符。

只有英语很好 - 不要担心特殊的西班牙语,瑞典语等字符。

我正在寻找一个可以用来计算这些字符串的正则表达式模式,它将在php和js中运行。

示例:

これは猫です,けど小猫も大丈夫。

应该算作13个字符。

感谢您的帮助!

杰夫

3 个答案:

答案 0 :(得分:1)

你想要实现的目标,这将对你有所帮助:

仅计算平假名+片假名+汉字(日语)字符(标点符号除外):

var x = "これは猫です、けどKittyも大丈夫。";
x.match(/[ぁ-ゖァ-ヺー一-龯々]/g).length; //Result: 12 : これは猫ですけども大丈夫

已更新:

仅计算字母表中的单词:

x.match(/\w+/g).length; //Result: 1 : "Kitty"

全部在一行(作为功能):

function myCount(str) {
   return str.match(/[ぁ-ゖァ-ヺー一-龯々]|\w+/g).length;
}
alert(myCount("これは猫です、けどKittyも大丈夫。")); //13    
alert(myCount("これは犬です。DogとPuppyもOKですね!")); //14

这些是匹配产生的数组:

["こ", "れ", "は", "猫", "で", "す", "け", "ど", "Kitty", "も", "大", "丈", "夫"]
["こ", "れ", "は", "犬", "で", "す", "Dog", "と", "Puppy", "も", "OK", "で", "す", "ね"]

更新(JAP,KOR,CH):

function myCount(str) {
   return str.match(/[ぁ-ㆌㇰ-䶵一-鿃々가-힣-豈ヲ-ン]|\w+/g).length;
}

这些将涵盖约99%的日语,中文和韩语。您可能需要手动添加未包含的额外字符,例如“〶”。

非常好的参考是:

http://www.tamasoft.co.jp/en/general-info/unicode.html

这可以解决你的问题。

答案 1 :(得分:0)

好的,所以我会做两次跑步:首先计算英语单词的出现次数,然后计算亚洲单词出现次数。这是一个JS示例,在PHP中可能有所不同。在JS中,只有ASCII字符匹配\ w。

string = "これは猫です、けどKittyも大丈夫";
var m = string.match(/\w+/gm);
var e_count = m.length; // is 1

接下来算一下亚洲人的角色。

m = string.match(/([^\w\s\d])/gm); // any non-whitespace, non-word, non-digit chars
var a_count = m.length; // is 13

您可能需要稍微调整一下。但在JS中,你可以加上e_count和a_count,你应该很高兴。

另请查看Rubular:http://www.rubular.com

  • 约翰内斯

答案 2 :(得分:0)

/[[:ascii:]]+|./之类的内容将匹配一个非ASCII字符或一个或多个ASCII字符。可能就是15分。所以你似乎想忽略标点符号。可能:/[A-Za-z]+|[^[:punct:]]/

$ perl -E 'use utf8; $f = "これは猫です、けどKittyも大丈夫。"; ++$c while $f =~ /[A-Za-z]+|[^[:punct:]]/g; say $c'
13

所以,至少在Perl中有效。可能在JS和PHP中,只要他们的[[:punct:]]理解Unicode。

另一种方法是过滤掉东西。