1. ホーム
  2. php

[解決済み】正規表現でスペースにマッチングさせる

2022-03-29 22:37:37

質問

PHPの正規表現でスペース文字にマッチさせるにはどうしたらいいですか?

つまり、"gavin schulz"のように、2つの単語の間にスペースがある場合です。私は、文字と数字とスペースだけを許可するように正規表現を使用しています。しかし、スペースをどのように見つけるのかがよくわかりません。今、私が持っているのはこれです。

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

解決方法は?

スペースなら、それは " " (スペース1つ分)。

1つ以上の場合、それは " *" (それは スペースとアスタリスク)または " +" (スペース1個とプラス1個)。

一般的なスペーシングであれば "[ X]" または "[ X][ X]*" または "[ X]+" ここで X は物理的なタブ文字です(これらの例では、それぞれの前に空白が1つずつあります)。

これらは あらゆる * 私がこれまでに見たことのある正規表現エンジン(中には、1つ以上の "+" という文字が表示されます。)

最新の正規表現エンジンを使うことが分かっている場合。 "\s" とそのバリエーションがおすすめです。また、単語境界は行頭と行末を一致させるので、前後の空白がない単語を探すときに重要だと思います。

特にPHPの場合。 このページ が役立つかもしれません。

あなたの編集を見ると、有効でない文字をすべて削除したいようです。 その始まりは次のとおりです(正規表現内のスペースに注意してください)。

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

各単語の間にスペースを1つだけ入れ、最初と最後には何も入れないようにするトリックも必要な場合は、もう少し複雑になりますが(おそらく別の質問)、基本的な考え方は次のようになります。

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