2010-01-14 21 views
5

Quiero devolver la salida "coincidencia" si el patrón "regular" es una subcadena de variable st. es posible?boost regex sub-string partido

int main() 
{ 
    string st = "some regular expressions are Regxyzr"; 

    boost::regex ex("[Rr]egular"); 
    if (boost::regex_match(st, ex)) 
    { 
    cout << "match" << endl; 
    } 
    else 
    { 
    cout << "not match" << endl; 
    } 
} 
+0

¿Lo has probado? Si es así, ¿qué pasó? –

+0

sí, obtengo "no coincide" si st = "normal" obtengo "coincidencia" – bob

Respuesta

16

El boost :: regex_match solo coincide con toda la cadena, es probable que desee boost :: regex_search en su lugar.

7

regex_search hace lo que quiere; regex_match se documenta como

determina si un determinado expresión regular coincide con todo de una determinada secuencia de caracteres

(el énfasis está en la URL original que estoy citando).

0

Su pregunta se responde con el ejemplo en la documentación de la biblioteca - boost::regex

enfoque alternativo:

Usted puede utilizar impulso :: regex_iterator, esto es útil para archivos, etc.

string[0], 
string[1] 

a continuación el análisis indica el iterador de inicio y final.

Ex:

boost::regex_iterator stIter(string[0], string[end], regExpression) 
boost::regex_iterator endIter 

for (stIter; stIter != endIter; ++stIter) 
{ 
    cout << " Whole string " << (*stIter)[0] << endl; 
    cout << " First sub-group " << (*stIter)[1] << endl; 
} 

}

+0

La respuesta aceptada en esta página explica mejor sregex_iterator http://stackoverflow.com/questions/2593288/how-to-use-c -boosts-regex-iterator – syam

Cuestiones relacionadas