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 permita 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);
Respuestas:
Si está buscando un espacio, sería
" "
(un espacio).Si está buscando uno o más, es
" *"
(son dos espacios y un asterisco) o" +"
(un espacio y un signo más).Si usted está buscando para el espaciamiento común, el uso
"[ X]"
o el"[ X][ X]*"
o"[ X]+"
dondeX
es el carácter de tabulación física (y cada uno está precedido por un solo espacio en todos los ejemplos).Estos funcionarán en todos los motores * regex que he visto (algunos de los cuales ni siquiera tienen el carácter de uno o más
"+"
, ugh).Si sabe que usará uno de los motores regex 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, lo que es importante cuando busca palabras que pueden aparecer sin espacios anteriores o siguientes.Para PHP específicamente, esta página puede ayudar.
De su edición, parece que desea eliminar todos los caracteres no válidos. El comienzo de esto es (tenga en cuenta el espacio dentro de la expresión regular):
Si también desea trucos para asegurarse de que solo hay un espacio entre cada palabra y ninguno al principio o al final, eso es un poco más complicado (y probablemente otra pregunta), pero la idea básica sería:
fuente
A-Za-z...
. El cursor dentro de los corchetes dicta eso. Mover el cursor fuera de los corchetes cambia su significado a caracteres coincidentes en el conjunto al comienzo de la cadena.\040
coincide exactamente con el carácter espacial.Referencia PHP Regexp
Nuevas secuencias de Link
Escape para Regex PHP
fuente
Aquí hay todo lo que necesita saber sobre espacios en blanco en expresiones regulares:
[[:blank:]]
Solo espacio o tabulación[[:space:]]
Espacio en blanco\s
Cualquier caracter de espacio en blanco\v
Espacio en blanco vertical\h
Espacio en blanco horizontalx
Ignorar espacios en blancofuente
Me parece que usar un REGEX en este caso sería exagerado. ¿Por qué no simplemente hacer strpos para encontrar el personaje espacial? Además, no hay nada especial sobre el carácter de espacio en las expresiones regulares, debería poder buscarlo de la misma manera que buscaría cualquier otro carácter. Es decir, a menos que desactive el espacio en blanco del patrón, lo que difícilmente sería necesario en este caso.
fuente
En Perl, el interruptor es
\s
(espacio en blanco).fuente
Entonces es tan simple como agregar un espacio a lo que ya tienes:
(nota, ¿eliminé el
s|
que parecía no intencional? Ciertamentes
era redundante; puede restaurarlo|
si lo necesita)Si desea específicamente * * un espacio, como en solamente uno solo, se necesita una expresión más compleja que esto, y podría considerar una pieza no separada de la lógica de expresiones regulares.
fuente
También puede usar el \ b para un límite de palabra. Para el nombre, usaría algo como esto:
EDITAR Modificar esto para que sea una expresión regular en el ejemplo de Perl
EDITAR DE NUEVO Basado en lo que quieres:
fuente
Estoy probando [[: space:]] en una instancia en la que parece que los bloggers en WordPress están usando caracteres de espacio no estándar. Parece que funcionará.
fuente
Úselo así para permitir un espacio único.
fuente