2010-09-04 38 views
7

Pasé algún tiempo, pero aún tengo que encontrar una solución. Necesito una expresión regular que sea capaz de unir palabras con signos en ella (como C++) en cadena.Regex para que coincida con una palabra con signos + (más)

He usado /\bword\b/, para palabras "habituales", funciona bien. Pero tan pronto como intento /\bC\+\+\b/ simplemente no funciona. De alguna manera funciona mal con un signo más en él.

Necesito una expresión regular para detectar si la cadena de entrada contiene palabra C++. De entrada como,

"c++ developer" 
"using c++ language" 

etc.

ps. Utilizando la función C#, .Net Regex.Match.

¡Gracias por la ayuda!

Respuesta

15

+ es un carácter especial por lo que necesita para escapar de ella

\bC\+\+(?!\w) 

Tenga en cuenta que no podemos usar \b porque + no es una palabra caracteres.

+0

Hola Kenny, lo estoy usando. No se visualizó a la vista. He corregido una pregunta. No funciona así. –

+0

@alex: ¿Has probado '(?! \ W)'? – kennytm

+0

con (?! \ W) ¡hace exactamente lo que necesito! muchas gracias –

2

El signo más tiene un significado especial por lo que tendrá que escapar con \. La misma regla se aplica a estos personajes: \, *, +, ?, |, {, [, (,), ^, $,., #, y el espacio blanco de

ACTUALIZACIÓN: el problema era con \b secuencia

5

El problema no es con el carácter positivo, que se ha escapado de forma correcta, pero la secuencia \b. Indica un límite de palabra, que es un punto entre un carácter de palabra (alfanumérico) y otra cosa. Además, no es un carácter de palabra, por lo que para que \b coincida, debería haber un carácter de palabra directamente después del último signo más.

\bC\+\+\b coincide con "Test C++ Test" pero no "Prueba C++ Test" por ejemplo. Pruebe algo como \bC\+\+\s si espera que haya un espacio en blanco después del último signo más.

+0

Específicamente '\ b' coincide entre' \ w' y '\ W' (o viceversa). – Richard

+0

gracias por la gran respuesta! \ bC \ + \ + \ s, funciona muy bien, pero también coincide con el espacio después del último signo +, no es un gran problema, pero de todos modos un poco inesperado. –

+0

@alexander Puedes hacer que el espacio sea un vistazo para evitar incluirlo en la coincidencia: '\ bC \ + \ + (? = \ S)'. –

0

Como los otros dijeron, el problema no es el signo + que ha escapado correctamente, pero el \b que es un cero-longitud de carbón que coinciden límite de palabra que tiene lugar entre la palabra y no \w palabra \W carbón.

También hay otro error en su expresión regular, que desea hacer coincidir carbón C (mayúsculas) con c++ (en minúsculas) .Para hacer lo que tiene que cambiar su expresión regular para /\bc\+\+/ o utilizar el modificador i para que coincida con mayúsculas o minúsculas: /\bc\+\+/i

Cuestiones relacionadas