2011-01-19 66 views
0

字符计数单个字符需要一些帮助,从正则表达式的绝地大师:正则表达式来算英语单词中的亚洲话

如果我有MB字符与英文单词(特别是日本,韩国或中国)的字符串整个撒,我想算:

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

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

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

实施例:

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

,都应视为13个字符。

感谢您的帮助!

杰夫

+0

也许我对东方字母不够熟悉,但在你的例子中,我计算了14个“非英文”字符,加上Kitty这个词。那总共是15.或者,也许,并且实际上是标点符号,你也想忽略它? – 2011-01-19 01:07:10

+0

nope - 我的计数是正确的。你可能认为猫是两个字符? (只有一个) – jmadsen 2011-01-20 04:51:28

回答

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

这应该可以解决你的问题。

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

  • 约翰内斯
+0

这可能是我们所做的,但我想坚持一个可能的“单程”模式。 – jmadsen 2011-01-20 04:54:02

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。

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