2010-05-13 7 views
5

Nueva pregunta Como sugiere Asaf en cuestión anterior: Regex to check if exact string existsexpresión regular para comprobar si existe cadena exacta incluyendo #

Busco una manera de comprobar si existe una coincidencia exacta cadena en otra cadena usando expresiones regulares o cualquier otro método mejor sugirió. Entiendo que le digas a Regex que coincida con un espacio o cualquier otro carácter que no sea de palabra al principio o al final de una cadena. Sin embargo, no sé exactamente cómo configurarlo.

Cadena de búsqueda: #t

debe coincidir:
Cadena 1: Hello World, Nice to see you! #t
Cadena 2: #T Hello World, Nice to see you!
Cadena 3: Hello World, #t Nice to see you!

no debe coincidir:
Cadena 1: Hello World, Nice to see you!
Cadena 2: Hello World, Nice to see you! #ta
Cadena 3: #tHello World, Nice to see you!

Edit 2: Se ha añadido más muestras de cuerda

Edición 1 para Serg555 y SilentGhost:
caracteres permitidos en cadena de búsqueda:
#[_a-zA-Z0-9]
# es opcional.

Requisitos: La cadena de búsqueda puede estar en cualquier posición de carácter en el Asunto. Puede haber o no un carácter de espacio en blanco antes o después de él. No quiero que coincida si es parte de otra cadena; como parte de una palabra.

En aras de esta pregunta: Creo que me gustaría hacer esto usando este patrón: /\b\#t\b/gi
Sin embargo, esto no está devolviendo los resultados como me hubiera esperado.

soy capaz de encontrar las coincidencias exactas para las cadenas normales (cuerdas donde # no está presente) usando:

/\b{$search_string}\b/gi

Otros detalles: esto va a ser usado en PHP 5

Respuesta

5

Todos lo que necesita es:

/(?:^|\s)#t\b/i   #t is in the beginning or preceded by space. 

\b partidos frontera palabra, que es una frontera entre caracteres de palabras y caracteres que no son de texto . # es un carácter no word, por lo tanto, su expresión regular solo coincide con cadenas como esta: abc#t o ab_#t.

Además, normalmente # no es un personaje especial en la expresión regular, no es necesario que lo escape.

ETA: Sus requisitos son bastante ambiguos: Puede haber o no un carácter de espacio en blanco antes o después de este. No quiero que coincida si es parte de otra cadena; como parte de una palabra.

  1. no hay espacio en blanco carácter antes o después? Entonces, ¿habrá un personaje que no sea de espacio en blanco?
  2. pero ¿cómo se separa de otras cadenas? ¿Qué personajes están permitidos?

Creo que necesita dar una muestra completa de sus posibles cadenas de entrada. Porque, como es mi expresión regular, funciona bien.

+0

¿Y si sólo quiero que coincide con '# t' pero no' abC# t' o '# Ta'? – Jayrox

+0

Este también coincidiría con abC# t, pero no debería. – serg

+0

@serg: No creo que OP tenga tal problema – SilentGhost

0

Trate /(?!\b)#t\b/si

+0

y esto coincidirá con '& # t' – SilentGhost

+0

Sí, usar \ b para buscar caracteres que no sean palabras no es la mejor idea. Pero todavía haría menos coincidencias falsas que '#t \ b' – serg

+0

uhm, a la derecha. ¿Fallará en todas las entradas proporcionadas por OP – SilentGhost

Cuestiones relacionadas