正規表現でのスペースのマッチング 質問する

正規表現でのスペースのマッチング 質問する

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

おすすめ記事