PHPの正規表現でスペース文字を照合する必要があります。誰かアイデアはありますか?
「gavin schulz」のように、2つの単語の間のスペースです。正規表現を使用して、文字、数字、スペースのみを許可するようにしています。しかし、どのようにスペースを見つけるのかわかりません。これは私が今持っているものです:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
PHPの正規表現でスペース文字を照合する必要があります。誰かアイデアはありますか?
「gavin schulz」のように、2つの単語の間のスペースです。正規表現を使用して、文字、数字、スペースのみを許可するようにしています。しかし、どのようにスペースを見つけるのかわかりません。これは私が今持っているものです:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
回答:
あなたがスペースを探しているなら、それは" "
(1つのスペース)でしょう。
1つ以上を探している場合、それは" *"
(2つのスペースとアスタリスク)または" +"
(1つのスペースとプラス)です。
共通の間隔を探している場合は、"[ X]"
or "[ X][ X]*"
または"[ X]+"
whereを使用して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
A-Za-z...
です。角括弧内のキャレットがそのことを示しています。キャレットを角括弧の外に移動すると、その意味が文字列の先頭にあるセット内の一致する文字に変わります。
Perlでは、スイッチは\s
(空白)です。
WordPressのブロガーが非標準のスペース文字を使用しているように見えるインスタンスで[[:space:]]を試しています。うまくいくようです。