首页 > 解决方案 > 阿拉伯语正则表达式匹配 - C++

问题描述

我需要找到给定的字符串有阿拉伯字母。它的范围从\u0600-\u06FF\u0750-\u077F.

我编写了以下程序:

std::vector<STD_STRING> strFieldvalues;
std::string pattern = "/[\u0600-\u06FF\u0750-\u077F]/";
std:string strFieldVal;
gboolArabic = false;
int i = 0;
int j = 0;
for ( ;i < fieldValues.size() && j< fieldNames.size(); i++,j++) //for loop its entering
{
    strFieldVal=fieldValues[i].GetPString();
    if (std::regex_match(strFieldVal, std::regex("(sub)(/[\u0600-\u06FF\u0750-\u077F]/)")))
    {
        gboolArabic = true;
        gArabicFieldNames.push_back(fieldNames[j].GetPString());
    }
}

strFieldVal 以 <0067><062A><0627> 的形式出现。但它没有进入 if 块。谁能帮忙。

下面给出的示例程序在在线编译器中工作。在视觉工作室中,不进入 if 块。添加屏幕截图。 在此处输入图像描述 在此处输入图像描述

标签: c++regexarabic-support

解决方案


看来您需要删除正则表达式两端的正则表达式分隔符并将+量词应用于正则表达式模式,因为regex_match需要完整的字符串匹配:

#include <iostream>
#include <regex>

int main() {
    std::string strFieldVal("المتحدة");
    std::regex pattern("[\u0600-\u06FF\u0750-\u077F]+");
    if (std::regex_match(strFieldVal, pattern))
    {
        std::cout << strFieldVal << " is Arabic.\n";
    }
    return 0;
}

请参阅C++ 演示,输出:المتحدة is Arabic..


推荐阅读