2012-03-15 10 views
10

Come posso abbinare tutti i caratteri "speciali" (come +_*&^%$#@!~) eccetto il char - in PHP?Come abbinare con regex tutti i caratteri speciali ad eccezione di "-" in PHP?

So che \W corrisponderà a tutti i caratteri "speciali" incluso -.

Eventuali suggerimenti in considerazione delle lettere Unicode?

+7

*** Tutti i personaggi sono * * “speciale” *** Dite quello che vuoi dire!. – tchrist

+0

caratteri speciali come + _) (* e ^% $ # @! ~, Non di qualsiasi lingua ... – CaTz

+1

L'inglese usa sicuramente la maggior parte di questi caratteri. Molti di questi sono usati in molte lingue. non hai ancora definito "speciale". ** Qual è la proprietà dei caratteri Unicode per "particolarità" ???? ** – tchrist

risposta

30
  • [^-] non è il carattere speciale che si desidera
  • [\W] sono tutti caratteri speciali come sai
  • [^\w] sono tutti caratteri speciali - sembra giusto?

Così dunque [^\w-] è la combinazione di entrambi: Tutti i caratteri "speciali", ma senza -.

+0

funziona anche, grazie, per qualche motivo non corrisponde al _car ... ma sono riuscito a bypassarlo, – CaTz

+0

Cosa pensi che '[\ W]' non sia quello '\ W'? – tchrist

+0

@tchrist: cosa intendi, non lo penso. – hakre

3

Si può provare questo modello

([^a-zA-Z-])

Questo dovrebbe corrispondere tutti i caratteri che non sono a-z e la -

+0

non è buona, perché possono esserci lettere in unicode ... comunque, trovato il risposta! [^ \ p {L} - \ d] – CaTz

+0

Considerando che tu fossi molto ampio con la tua domanda, non c'era un ambito specifico di caratteri impostato, quindi questa è la mia ipotesi. –

4
  • \pL corrisponde a qualsiasi carattere con la proprietà di caratteri Unicode Letter, che è un importante gruppo di categoria generale; cioè, corrisponde a [\p{Ll}\p{Lt}\p{Lu}\p{Lm}\p{Lo}].
  • \pN corrisponde a qualsiasi carattere con la proprietà di carattere Unicode Number, che è un importante gruppo di categorie generali; cioè corrisponde a [\p{Nd}\p{Nl}\p{No}].
  • Si noti che la proprietà del carattere Unicode Alphabetic include anche alcuni segni combinati come U + 0345 ◌ ᴄᴏᴍʙɪɴɪɴɢ ɢʀᴇᴇᴋ ʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ. Ti suggerisco di includere anche \pM, che corrisponde a qualsiasi carattere con la proprietà di carattere Unicode Mark, che è un importante gruppo di categorie generali; cioè corrisponde a [\p{Mn}\p{Me}\p{Mc}].
  • Il carattere U + 002D ʜʏᴘʜᴇɴ-ᴍɪɴᴜꜱ è probabilmente lo - a cui ti riferisci.
  • Nota però che v6.1 Unicode ha 27 caratteri con la proprietà di caratteri Unicode Dash, tra cui tali caratteri comuni come U + 2010 ʜʏᴘʜᴇɴ, U + 2013 ᴇɴ ᴅᴀꜱʜ, U + 2014 ᴇᴍ ᴅᴀꜱʜ, e U + 2212 ᴍɪɴᴜꜱ ꜱɪɢɴ . Che tu voglia davvero includerli o escluderli, non ne ho idea.

Considerato tutto questo, non è improbabile che si desidera qualcosa di simile:

[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}] 
Problemi correlati