Yo te lo pongo fácil. Agrego un nuevo archivo C ++ a mi proyecto Objective C, lo renombro como .mm y luego creo una clase C ++ estándar dentro. Luego, hago un método de clase estática en la sección "public:" para una función C ++ que toma un NSString y devuelve un NSString (o NSArray, si eso es lo que quieres). Luego convierto NSString a C ++ std :: string así:
// If anyone knows a more efficient way, let me know in the comments.
// The "if" condition below is because ObjC crashes if converting to
// std::string if the string is nil or empty.
// assume #include <string>
std::string s = "";
if (([sInput != nil]) && (!([sInput isEqualTo:@""]))) {
std::string sTemp([sInput UTF8String]);
s = sTemp;
}
A partir de ahí, puedo usar regex_replace así:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
Entonces, puedo convertir ese std :: string nuevamente en un NSString con:
NSString *sResponse2 = @(sResult.c_str());
Si solo está usando este C ++ solo para esta función, puede que le resulte adecuado llamar a este archivo extra.mm (nombre de clase Extra) y poner este método de clase estática, y luego agregar otros métodos de clase estática cuando llegue la situación donde tiene sentido hacerlo en C ++ porque es menos complicado en algunos casos. (Hay casos donde ObjC hace algo con menos líneas de código, y algunos casos donde C ++ lo hace con menos líneas de código).
PD Aún otra forma de hacerlo es usar un archivo .mm pero hacer un contenedor de Objective C alrededor del uso de std :: string y std :: regex_replace () (o regex_match ()).