Preciso combinar um caractere de espaço em uma expressão regular do PHP. Alguém tem alguma idéia?
Quero dizer como "gavin schulz", o espaço entre as duas palavras. Estou usando uma expressão regular para garantir que apenas permita letras, número e espaço. Mas não sei como encontrar o espaço. Isto é o que eu tenho agora:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
Respostas:
Se você está procurando um espaço, isso seria
" "
(um espaço).Se você estiver procurando por um ou mais, é
" *"
(são dois espaços e um asterisco) ou" +"
(um espaço e um plus).Se você estiver procurando por espaçamento comum, use
"[ X]"
ou"[ X][ X]*"
ou"[ X]+"
ondeX
é o caractere de tabulação físico (e cada um é precedido por um único espaço em todos esses exemplos).Eles funcionarão em todos os * mecanismos regex que eu já vi (alguns dos quais nem têm o um ou mais
"+"
caráter de , ugh).Se você sabe que usará um dos mecanismos regex mais modernos,
"\s"
e suas variações são o caminho a percorrer. Além disso, acredito que os limites das palavras também correspondem ao início e ao fim das linhas, importante quando você procura palavras que possam aparecer sem espaços precedentes ou seguintes.Para o PHP especificamente, esta página pode ajudar.
Na sua edição, parece que você deseja remover todos os caracteres inválidos. O início é (observe o espaço dentro da regex):
Se você também quiser que os truques garantam que exista apenas um espaço entre cada palavra e nenhuma no início ou no final, isso é um pouco mais complicado (e provavelmente outra pergunta), mas a idéia básica seria:
fonte
A-Za-z...
. O sinal de intercalação dentro dos colchetes determina isso. Mover o cursor para fora dos colchetes muda seu significado para caracteres correspondentes no conjunto no início da string.\040
corresponde exatamente ao caractere de espaço.Referência PHP Regexp
Novas seqüências de escape de link
para o Regex PHP
fonte
Aqui está tudo o que você precisa saber sobre espaço em branco em expressões regulares:
[[:blank:]]
Apenas espaço ou tabulação[[:space:]]
Espaço em branco\s
Qualquer caractere de espaço em branco\v
Espaço em branco vertical\h
Espaço em branco horizontalx
Ignorar espaço em brancofonte
Parece-me que usar um REGEX nesse caso seria apenas um exagero. Porque não basta apenas strpos para encontrar o caractere de espaço. Além disso, não há nada de especial no caractere de espaço em expressões regulares; você deve procurá-lo da mesma forma que pesquisaria qualquer outro caractere. Ou seja, a menos que você desabilite o espaço em branco do padrão, o que dificilmente seria necessário nesse caso.
fonte
No Perl, o comutador é
\s
(espaço em branco).fonte
Então é tão simples quanto adicionar um espaço ao que você já tem:
(observe, eu removi o
s|
que parecia não intencional? Certamente issos
era redundante; você pode restaurar o|
se precisar)Se você deseja especificamente um espaço * a *, como em apenas um único, precisará de uma expressão mais complexa que essa e poderá considerar uma parte lógica diferente da não-regex.
fonte
Você também pode usar o \ b para um limite de palavras. Para o nome eu usaria algo como isto:
EDIT Modificando isso para ser uma regex no exemplo Perl
EDITAR NOVAMENTE Com base no que você deseja:
fonte
Estou testando [[: space:]] em uma instância em que parece que blogueiros no WordPress estão usando caracteres de espaço não padrão. Parece que vai funcionar.
fonte
Use-o assim para permitir espaço único.
fonte