2012-02-23 13 views
8

Muy simple, necesito hacer coincidir el símbolo # con una expresión regular. Estoy trabajando en un detector de etiquetas.Cómo hacer coincidir un símbolo de libra (#) en una expresión regular en php (para hashtags)

He intentado buscar en google y en desbordamiento de pila. Una publicación relacionada es here, pero como quiso eliminar el símbolo # de la cadena, no utilizó expresiones regulares.

He intentado las expresiones regulares /\b\#\w\w+/, y /\b#\w\w+/ y no funcionan y si elimino el #, detecta la palabra.

+3

¿Trataste de escapar? ''\ #'' – Vitamin

+0

publique el texto de muestra del que desea hacer una coincidencia. su problema probablemente no sea el símbolo #, sino la expresión regular en la que lo está incrustando. – pocketfullofcheese

+0

@Vague: parece que lo hizo, en la primera expresión regular que publicó. –

Respuesta

5

No es necesario para escapar de ella (que es probablemente el \b que está lanzando fuera):

if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) { 
    print_r($matches); 
} 

/* output of $matches: 
Array 
(
    [0] => abc#def 
    [1] => def 
) 
*/ 
+1

Quiero que detecte #abcdef, no asdasd # esto. –

+5

Pero respondió lo que le pedí. –

10

# no tiene ningún significado especial en una expresión regular, a menos que lo utilice como delimitador. Así que simplemente ponlo directo y debería funcionar.

Tenga en cuenta que \b detecta un límite de palabra, y en #abc, el límite de palabra es después de la # y antes de la abc. Por lo tanto, necesita usar\b es superfluo y solo necesita #\w\w+.

+0

¿Por qué necesita '\ w' dos veces? ¿'' W + 'no significa uno o más? –

+0

Porque así fue en el OP. Idealmente usaría '\ w {2,}' para significar "dos o más". –

+0

El '\ b' en' # \ b \ w' es obviamente superfluo. – Gumbo

0

Puede usar la siguiente expresión regular: /\#(\w+)/ para que coincida con un hashtag con solo la palabra del hashtag o: /\#\w+/ coincidirá con todo el hashtag incluido el hash.

2

Con el comentario de la respuesta anterior, desea evitar la coincidencia x#x. En ese caso, su no necesitan \b pero \B:

\B#(\w\w+)

(si realmente necesita de dos o más caracteres de palabra después de la #).

\B significa NON-word-boundary, y dado que # no es un carácter de palabra, esto coincide exactamente si el carácter anterior no es un carácter de palabra.

+0

Un poco tarde, pero +1 de todos modos, porque nadie más señaló esto. –

Cuestiones relacionadas