PHP正規表現の空白文字と一致させる必要があります。誰かアイデアがありますか?
2つの単語の間にあるスペース、 "gavin schulz"のようなものです。文字、数字、スペースのみを許可するように、正規表現を使用しています。しかし、私はその空間の見つけ方がわからない。これは私が今持っているものです:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
スペースを探しているなら、それは" "
(1スペース)でしょう。
あなたが1つ以上を探しているなら、それは" *"
(それはtwoスペースとアスタリスク)または" +"
(スペースとプラス)です。
共通のスペースを探している場合は、"[ X]"
または"[ X][ X]*"
または"[ X]+"
を使用します。ここで、X
は物理タブ文字です(これらすべての例では、それぞれの前にスペースが1つ付いています)。
これらはevery*これまで見たことのある正規表現エンジンで動作します(それらの中には1つ以上の"+"
文字さえ持っていないものもあります、ugh)。
あなたがより現代的な正規表現エンジンのうちの1つを使用することをあなたが知っているならば、"\s"
とそのバリエーションは進むべき道です。さらに、単語の境界も行頭と行末に一致すると考えられます。前後にスペースを入れずに表示される単語を探している場合には重要です。
特にPHPの場合、 このページ が役に立つかもしれません。
あなたの編集から、それはあなたがすべての無効な文字を削除したいようです。これの始まりは次のとおりです(正規表現の内側のスペースに注意してください):
$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag);
# ^ space here
各Wordの間にスペースが1つしかなく、開始時または終了時にスペースが1つしかないようにするには、もう少し複雑な(そしておそらく別の質問)が基本的な考え方になります。
$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space
$newtag = preg_replace ("/^ /", "", $tag); # remove space from start
$newtag = preg_replace ("/ $/", "", $tag); # and end
これが正規表現の空白文字について知っておくべきことです。
[[:blank:]]
スペースまたはタブのみ[[:space:]]
空白文字\s
任意の空白文字\v
垂直方向の空白\h
水平方向の空白x
空白を無視するPerlでは、スイッチは\s
(空白文字)です。
このような場合にREGEXを使用するのはやり過ぎになりがちです。スペース文字を見つけるには、 strpos だけでは不十分です。また、正規表現の中の空白文字について特別なことは何もありません、他の文字を検索するのと同じようにそれを検索できるはずです。つまり、パターンの空白を無効にしない限り、これはこの場合はほとんど必要ありません。
文字、数字、スペースのみを許可するように正規表現を使用しています
それからそれはあなたがすでに持っているものにスペースを追加するのと同じくらい簡単です:
$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);
(注意、意図しないと思われるs|
を削除しましたか?確かにs
は冗長なので、必要に応じて|
を復元できます)。
のみのように* a *スペースが特に必要な場合は、これよりも複雑な式が必要になります。正規表現でない部分のロジック.
Wordの境界に\ bを使用することもできます。名前のために私はこのようなものを使うでしょう:
[^\b]+\b[^\b]+(\b|$)
EDITこれをPerlの例では正規表現になるように修正する
if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) {
$first_name = $1;
$last_name = $2;
}
もう一度編集必要なものに基づいて:
$new_tag = preg_replace("/[\s\t]/","",$tag);
このように使用して、単一スペースを考慮してください。
$newtag = preg_replace("/[^a-zA-Z0-9\s]/", "", $tag)
WordPressのブロガーが標準外のスペース文字を使用しているように見えるインスタンスで、[[:space:]]を試しています。うまくいくようです。