solo regulares regular probar online numeros letras expresiones expresion espacios espacio ejemplos blanco alfanumerico php regex

php - probar - Coincidencia de un espacio en expresiones regulares



expresiones regulares online (9)

Necesito hacer coincidir un carácter de espacio en una expresión regular de PHP. ¿Alguien tiene alguna idea?

Me refiero a "gavin schulz", el espacio entre las dos palabras. Estoy usando una expresión regular para asegurarme de que solo permito letras, números y un espacio. Pero no estoy seguro de cómo encontrar el espacio. Esto es lo que tengo ahora:

$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);


Estoy usando una expresión regular para asegurarme de que solo permita letras, números y un espacio

Entonces es tan simple como agregar un espacio a lo que ya tienes:

$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);

(nota, eliminé el s| que parecía involuntario? Ciertamente, el s era redundante, puede restaurar el | si lo necesita)

Si desea específicamente * a * espacio, como en uno solo, necesitará una expresión más compleja que esta, y puede que desee considerar una pieza de lógica no regex separada.


Úselo así para permitir espacio individual.

$newtag = preg_replace("/[^a-zA-Z0-9/s]/", "", $tag)


Aquí hay todo lo que necesita saber sobre espacios en blanco en expresiones regulares:

  • [[:blank:]] Solo espacio o pestaña
  • [[:space:]] blanco
  • /s Cualquier carácter de espacio en blanco
  • /v Espacio en blanco vertical
  • /h Espacio en blanco horizontal
  • x Ignorar el espacio en blanco

En Perl, el interruptor es /s (espacio en blanco).


Estoy probando [[: espacio:]] en una instancia donde parece que los bloggers en WordPress están usando caracteres espaciales no estándar. Parece que funcionará.


Me parece que usar un REGEX en este caso sería excesivo. ¿Por qué no simplemente strpos para encontrar el personaje del espacio? Además, no hay nada de especial en el carácter de espacio en las expresiones regulares, debería poder buscarlo de la misma manera que buscaría cualquier otro personaje. Es decir, a menos que haya desactivado el espacio en blanco del patrón, lo que difícilmente sería necesario en este caso.


Si está buscando un espacio, sería " " (un espacio).

Si busca uno o más, es " *" (que son dos espacios y un asterisco) o " +" (un espacio y un más).

Si está buscando un espaciado común, use "[ X]" o "[ X][ X]*" o "[ X]+" donde X es el carácter de tabulación física (y cada uno va precedido de un único espacio en total esos ejemplos).

Estos funcionarán en todos los motores * regex que he visto (algunos de los cuales ni siquiera tienen el carácter "+" una o más, ugh).

Si sabe que usará uno de los motores de expresiones regulares más modernos, "/s" y sus variaciones son el camino a seguir. Además, creo que los límites de las palabras también coinciden con el inicio y el final de las líneas, importante cuando busca palabras que pueden aparecer sin espacios anteriores o posteriores.

Para PHP específicamente, esta página puede ayudar.

A partir de su edición, parece que desea eliminar todos los caracteres no válidos. El inicio de esto es (tenga en cuenta el espacio dentro de la expresión regular):

$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag); # ^ space here

Si también quieres engañar para asegurarte de que hay solo un espacio entre cada palabra y ninguna al principio o al final, eso es un poco más complicado (y probablemente sea otra pregunta) pero la idea básica sería:

$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space $newtag = preg_replace ("/^ /", "", $tag); # remove space from start $newtag = preg_replace ("/ $/", "", $tag); # and end


También puede usar el / b para un límite de palabras. Para el nombre, usaría algo como esto:

[^/b]+/b[^/b]+(/b|$)

EDITAR Modificando esto para que sea una expresión regular en el ejemplo de Perl

if( $fullname =~ /([^/b]+)/b[^/b]+([^/b]+)(/b|$)/ ) { $first_name = $1; $last_name = $2; }

EDITAR DE NUEVO Basado en lo que desea:

$new_tag = preg_replace("/[/s/t]/","",$tag);