2010-09-04 16 views
7

Ho passato un po 'di tempo, ma devo ancora risolvere. Ho bisogno di un'espressione regolare che sia in grado di far corrispondere una parola con segni (come C++) nella stringa.Regex per abbinare una parola con segni + (più)

Ho usato /\bword\b/, per parole "normali", funziona OK. Ma appena provo lo /\bC\+\+\b/, non funziona. E 'un po' come funziona male con un segno positivo in esso.

Ho bisogno di un'espressione regolare per rilevare se la stringa di input contiene parola C++. Ingresso come,

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

ecc

ps. Utilizzo di C#, .Net Regex.Match.

Grazie per l'aiuto!

risposta

15

+ è un carattere speciale, quindi è necessario sfuggire

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

Nota che non possiamo usare \b perché + non è una parola-carattere.

+0

Ciao Kenny, lo sto usando. Non è stato visualizzato in vista. Ho corretto una domanda. Non funziona così. –

+0

@alex: hai provato '(?! \ W)'? – kennytm

+0

con (?! \ W) fa esattamente quello che mi serve! grazie mille –

2

Il segno più ha un significato speciale, pertanto è necessario scappare con \. La stessa regola vale per questi personaggi: \, *, +, ?, |, {, [, (,), ^, $,., #, e lo spazio bianco

UPDATE: il problema era con \b sequenza

5

Il problema non è con il carattere più, che sei scappato in modo corretto, ma la sequenza \b. Indica un limite di parole, che è un punto tra un carattere di parola (alfanumerico) e qualcos'altro. Inoltre non è un carattere di parola, quindi per corrispondere a \b, sarà necessario un carattere di parola direttamente dopo l'ultimo segno più.

\bC\+\+\b corrisponde "Test C++ Test" ma non "Test C++ Test" ad esempio. Prova qualcosa come \bC\+\+\s se ti aspetti che ci sia uno spazio vuoto dopo l'ultimo segno più.

+0

In particolare '\ b' corrisponde tra un' \ w' e un '\ W' (o visto contrario). – Richard

+0

grazie per la grande risposta! \ bC \ + \ + \ s, funziona alla grande, ma corrisponde anche allo spazio dopo l'ultimo segno +, non è un grosso problema, ma comunque un po 'inaspettato. –

+0

@alexander Puoi rendere lo spazio un lookahead per evitare di includerlo nella partita: '\ bC \ + \ + (? = \ S)'. –

0

Mentre gli altri dicono, il problema non è il segno + sei scappato correttamente, ma il \b che è una lunghezza pari a zero-char quel confine parola incontro che si svolge tra parola \w e non-parola \W char.

C'è anche un altro errore nel vostro regex, si desidera far corrispondere char C (maiuscolo) con c++ (minuscolo) .Per farlo dovete cambiare il vostro regex per /\bc\+\+/ o utilizzare il modificatore i per abbinare case insensitive: /\bc\+\+/i

Problemi correlati