Expresión regular con más de una parte ~ (no)

Estoy usando la siguiente expresión regular:

~(sizeof)\(<int|long>\)

para igualar:

blah blah (int)variable blah blah
blah blah (long)variable blah blah

pero no:

blah blah sizeof(int) blah blah

Todo eso funciona. Ahora, quiero seguir no juego:

HMODULE (WINAPI *fnPtr)(int) = NULL;

así que intenté:

~(sizeof|fnPtr\))\(<int|long>\)

pero todavía coincide con el fnPtr línea. ¿Cómo debo alterar la expresión regular para no coincidir con esa línea?

(Estoy usando la búsqueda de expresiones regulares en Visual Studio 2005).

(He simplificado enormemente la expresión regular tanto como la int|long parte es realmente int|long|... dónde ... son unos 40 tipos más).

Edit:

No importa, lo he resuelto. Necesitas hacer:

~(sizeof|(fnPtr.))\(<int|long>\)

que es reemplazar el fnPtr\) con (fnPtr.), de manera que la . coincide con el corchete, y para que el . está asociado con fnPtr.

preguntado el 27 de agosto de 11 a las 17:08

VS tiene un sabor diferente de patrones de expresiones regulares. Aconsejaría hacer el reemplazo en algún otro editor (por ejemplo, Notepad ++) y luego traer los resultados en VS. No es que no se pueda hacer en VS, pero necesitas aprender una sintaxis diferente que yo prefiero no aprender. -

Podría probarlo en UltraEdit, creo que usa expresiones regulares de Perl, pero obviamente preferiría no tener que administrar cientos de archivos usando dos programas separados donde uno (debería) funcionar. -

1 Respuestas

Prueba esto: [\w\s]+ \((int|long)\)[\w ]+

Aquí hay una demostración: http://regexhero.net/tester/?id=d18853f4-a737-4509-8c7b-babd0e9272d2

Nota: Lea mi comentario a su publicación. Esta es una expresión regular estándar, no una expresión regular de VS. Puede adoptarlo en consecuencia.

Respondido 27 ago 11, 21:08

No puedo usar el sitio al que se ha vinculado porque requiere Microsoft Silverlight. ¿Podrías explicar qué hace tu expresión para que pueda intentar adaptarla a VS2005? - Jack

Por lo que puedo decir en la red, [\ w \ s] + coincide con una o más palabras y espacios. Como funciona esto no coincide con la línea fnPtr? - Jack

En lugar de no coincidir, utilizo una coincidencia positiva: solo coincido [\w\s]+ seguido por (int) or (long). Tenía la sensación de que hay más de lo que se ve a simple vista y tu edición lo confirma. - Mrchief

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.