需要一些正则表达式绝地大师的帮助:
如果我有一串mb字符(特别是日语,韩语或中文),其中包含英文单词,我想算一下:
只有英语很好 - 不要担心特殊的西班牙语,瑞典语等字符。
我正在寻找一个可以用来计算这些字符串的正则表达式模式,它将在php和js中运行。
示例:
これは猫です,けど小猫も大丈夫。
应该算作13个字符。
感谢您的帮助!
杰夫
答案 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。
另一种方法是过滤掉东西。