PHP 正規表現でスペース文字を一致させるにはどうすればよいですか?
つまり、「gavin schulz」のように、2 つの単語の間にスペースがあるということです。文字、数字、スペースのみを許可するように正規表現を使用しています。しかし、スペースを見つける方法がわかりません。これが現在の状態です。
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
ベストアンサー1
スペースを探している場合は、" "
(1 つのスペース)になります。
1 つ以上の文字を検索する場合は、" *"
(スペース2 つとアスタリスク) または" +"
(スペース 1 つとプラス記号) を使用します。
共通のスペースを探している場合は、"[ X]"
または"[ X][ X]*"
または"[ X]+"
を使用しますX
。 は物理的なタブ文字です (すべての例では、それぞれの前に 1 つのスペースが付きます)。
これらは、私が今まで見たすべての* 正規表現エンジンで動作します(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