2011-01-19 27 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。

另一種方法是過濾掉東西。