2015-04-27 10 views
6

Sto cercando di abbinare emoticon seguito da un limite di parole \b.Fiammifero ":)" smiley seguito da un limite di parole

Diciamo che voglio corrispondere a :p e :) seguito da \b.

/(:p)\b/ funziona correttamente ma perché /(:\))\b/ si comporta in modo opposto?

+2

È necessario capire che cosa è esattamente un limite di una parola . È un limite tra un personaggio della classe di caratteri '\ w' e un carattere di' \ W' o il limite della stringa (inizio o fine) –

+2

'p' è una parola,') 'non lo è. – Maroun

+0

Vuoi abbinare ':))' o ':%% 'o cose del genere? – JimmyB

risposta

7

Non è possibile utilizzare un word boundary qui come ) è un carattere non di parole.

In poche parole: \b consente di eseguire un Solo parole intere di ricerca utilizzando un'espressione regolare in forma di \bword\b. Un carattere di parola è un carattere che può essere utilizzato per formare parole. Tutti i caratteri che non sono caratteri di parola sono caratteri non parole.

Usa (:\)) per abbinare :) e catturare nel primo gruppo di cattura.

Utilizzare /(:\))(?![a-z0-9_])/i per evitare la corrispondenza di qualsiasi :) s con lettere dopo lo smile. È un equivalente di (:\))\B.

\B è la versione negata di \b. \B partite in tutte le posizioni in cui lo \b non corrisponde. In effetti, \B corrisponde a qualsiasi posizione tra due word caratteri e in qualsiasi posizione tra due caratteri non di parole.

Vedere demo 1 e demo 2.

+0

'/ (: \)) /' corrisponde ":) p" ma non lo voglio. Quindi come dovrei fare? – httpete

+0

Quindi, usa '/ (: \)) (?! [A-z])/i' per evitare di trovare qualsiasi': '' s con le lettere dopo di esso. –

+0

In realtà '/ (::)) \ B /' funziona come voglio, come lo spieghi? – httpete

4

aggiunta alla risposta di stribizhev .. è possibile utilizzare (:\))\B

Esempi di quando usare cosa:

\b: stringa = That man is batman. regex = \bman\b partite solo man e non il man in batman perché posizione tra tm non è un limite di parole (è una parola).

\B: stringa = I am bat-man and he is super - man. regex = \B-\B partite - in super - man mentre \b-\b partite - in bat-man poiché posizione tra t- e -m sono confini di parola .. e (space) -, - (space) non è.

Nota: E 'facile capire se si considera \b o \B come una posizione tra due caratteri e se il passaggio da personaggio a personaggio è word to word o word to non word

Problemi correlati