Regex boşluk Eşleştirme

6 Cevap php

Ben php regex bir boşluk karakteri eşleştirmek gerekir. Herkes herhangi bir fikir var mı?

DÜZENLEME

I mean like "gavin schulz" the space in between the two words. I'll make another clarification. I did try and find more info but nothing turned up. Anyways I am using a regex to make sure that I only allow letters, number and a space. But I'm not sure how to find the space. This is what I have right now:

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

6 Cevap

Eğer bir boşluk arıyorsanız, o " " (bir boşluk) olacaktır.

Eğer bir veya daha fazla arıyorsanız, o " *" (yani two uzaylar ve bir yıldız var) veya " +" (bir boşluk ve bir artı) bulunuyor.

Ortak boşluk arıyorsanız, "[ X]" veya "[ X][ X]*" veya "[ X]+" burada X fiziksel sekme karakteri kullanmak (ve her biri ) Tüm bu örneklerde tek bir boşluk karakteri.

Bu şimdiye kadar (hatta öf, tek-veya-daha fazla "+" karakter yok bazıları) gördüm every * regex motoru çalışacaktır.

Eğer daha modern regex motorlarından birini kullanarak olacak biliyorsanız, "\s" ve varyasyonları gitmek için yoludur. Buna ek olarak, ben boşluk önceki veya bir sonraki olmadan görünebilir kelimeleri ararken kelime sınırları, hem de önemli bir başlangıç ​​ve çizgilerin ucunu maç inanıyorum.

PHP için özel olarak, this page yardımcı olabilir.

Düzenlemeden itibaren, size (regex içindeki boşluğa dikkat edin) olmayan tüm geçerli Karakterleri Bu başlangıç ​​kaldırmak istiyorsun, görünür:

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

Ayrıca, her kelime ve hiçbiri arasında sadece bir boşluk başlangıcında veya sonunda orada sağlamak için hile istiyorsanız, bu biraz daha karmaşık (ve muhtemelen başka bir soru) ama temel fikir olacaktır:

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

\040 tam boşluk karakteri ile eşleşir.

Regexp PHP reference

Bu sadece overkill olurdu bu durumda bir regex kullanarak gibi geliyor bana. Neden sadece sadece strpos boşluk karakteri bulmak için değil. Ayrıca, düzenli ifadelerde boşluk karakteri hakkında özel bir şey yok, sen başka bir karakteri aramak gibi bunun için aynı aramak gerekir. Pek bu durumda gerekli olacak desen boşluk, devre dışı sürece Yani,.

Ayrıca kelime sınırından \ b kullanabilirsiniz. Adı için ben böyle bir şey kullanmak istiyorsunuz:

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

EDIT bu Perl örnek bir regex olmak değiştirme

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

EDIT AGAIN ne istediğiniz dayanarak:

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

I am using a regex to make sure that I only allow letters, number and a space

O zaman zaten var ne bir boşluk ekleyerek kadar basittir:

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

(?; Geri yükleyebilirsiniz | Eğer gerekiyorsa not, ben s| hangi görünüyordu kasıtsız Kesinlikle s gereksiz idi kaldırıldı)

Özellikle istediğiniz * Eğer * uzay, only tek tek olduğu gibi, bu daha karmaşık bir ifade ihtiyacınız olacak, ve mantık olmayan ayrı bir regex parça düşünebilirsiniz.

Perl anahtarı \s (boşluk) 'dir.