下面是一个示例字符串 -
$string = "abcde वायरस abcde"
我需要检查该字符串是否包含任何印地语(梵文)内容,如果包含,则检查字符和单词的数量。我猜带有 unicode 字符类的正则表达式可以工作http://www.regular-expressions.info/unicode.html http://www.regular-expressions.info/unicode.html。但我无法找出正确的正则表达式语句。
要查明字符串是否包含印地语(梵文)字符,您需要拥有所有印地语字符的完整列表。根据这个网站 http://jrgraphix.net/r/Unicode/0900-097F,印地语字符是之间的十六进制字符0x0900
and 0x097F
(十进制 2304 到 2431)。
如果这些字符中有任何字符在该集中,则正则表达式模式需要匹配。因此,您可以使用模式(实际上是一组字符)来匹配字符串,如下所示:
[\u0900\u0901\u0902
... \u097D\u097E\u097F]
由于手动写下此字符列表相当麻烦,因此您可以通过迭代 2304 到 2431 的十进制字符或十六进制字符来生成此字符串。
要计算至少包含一个印地语字符的所有单词,您可以使用以下模式。它包含空格 (\s
) 围绕单词或开头 (^
) 或结尾 ($
)在世界各地,以及一个全局标志,以匹配每个出现的情况(/g
):
/(?:^|\s)[\u0900\u0901\u0902
... \u097D\u097E\u097F]+?(?:\s|$)/g
这是 JavaScript 中的实时实现:
var numberOfHindiCharacters = 128;
var unicodeShift = 0x0900;
var hindiAlphabet = [];
for(var i = 0; i < numberOfHindiCharacters; i++) {
hindiAlphabet.push("\\u0" + (unicodeShift + i).toString(16));
}
var regex = new RegExp("(?:^|\\s)["+hindiAlphabet.join("")+"]+?(?:\\s|$)", "g");
var string1 = "abcde वायरस abcde";
var string2 = "abcde abcde";
[ string1.match(regex), string2.match(regex) ].forEach(function(match) {
if(match) {
console.log("String contains " + match.length + " words with Hindi characters only.");
} else {
console.log("String does NOT contain any words with Hindi characters only.");
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)