• ベストアンサー

正規表現の空白文字の解釈?

正規表現について、「空白文字を区切りとして配列に分割する」というプログラムを書いていたのですが、私の浅い経験では、空白文字は "\s+"で処理できていたと思っていましたが、今PHP4で以下の結果、" +"でないと、正しく動作しませんでした。 $a = " 1 2 3 4 5 "; $b = split(" +", $a); "\s+"の方が正解だと私は思うのですが、どういう解釈で" +"でないといけないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

正規表現には方言があります。 \sもそのひとつで割合広く使われるものではありますが、POSIXなんかの規格にはありません。 また、PHPの正規表現は二種類(もしくは三種類)あり、それぞれ微妙に異なります。 参考URLの記述によれば、splitで使用できる正規表現では \s はメタ文字には ならないようです。\sでsplitしたいなら、参考URLにあるように preg_split を使うべきだと思います。

参考URL:
http://php.benscom.com/manual/ja/function.split.php
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 空白文字の正規表現

    お世話になります。 StringクラスのreplaceAllを使用して、文字列に含まれる空白を削除しようとしているのですが、空白文字の正規表現がおかしいらしく「エスケープ・シーケンスが無効です」とエラー文が表示されてしまいます。 空白文字の正規表現は「\s(バックスラッシュs)」でよろしかったでしょうか? 使用しているjreは1.6.0でした。 ご回答お願いいたします。

    • ベストアンサー
    • Java
  • split() 正規表現

    正規表現で / (スラッシュ) .(ドット)にマッチ 正規表現により文字列を分割し、配列に格納する split("[/\.]" $v)としていましたが split関数が使えなくなるので、変わりの方法を考えていますが preg_split()などではうまくいきませんでした。 何か方法を教えて下さい。

    • ベストアンサー
    • PHP
  • 正規表現で文字列を区切りたい

    PHPで、正規表現で文字列を分割する方法がわかりません。 やりたいことは、 1|ねこ|2|こあら|3|りす という文字列を、 1|ねこ 2|こあら 3|りす というように、直前の文字が数字でない|で区切りたいです。 区切るための関数は、mb_splitを考えています。 http://php.benscom.com/manual/ja/function.mb-split.php 調べていて、以下のページに書かれている話が近いのかなと思うのですが、 そこで述べられている正規表現の仕組みがよく分からないでいます。 http://okwave.jp/qa1849763.html ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • ""で囲まれていない箇所にある空白で分割

    PHPのカテゴリにて、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2334460 で同様の質問をした者なのですが、解決策を得られなかったので再度(こちらのPerlカテゴリにて)質問させて下さい。 (1)題名の通り、""に囲まれていない箇所にある空白によって文字列を分割したいのですが、split()等を使って一発で分割する正規表現はあるでしょうか。 (2)もし(1)が無理であれば、どういった手法が有効でしょうか。 ちなみに今のところ以下の方法で行っています。  1."" 中の空白をいったん別の文字に変換  2.split(/\s/) で分割  3.分割した各要素について1で変換した空白を復元

    • ベストアンサー
    • Perl
  • PHP 空白文字で分割したい

    $text = "日本 中国 オランダ" を 日本, 中国, オランダのように分割するために、 以下のコードを書きました。 preg_split("/[\s]+/", $text); しかし、全角スペースの時も分割したいので、正規表現を/[ \s]+/とすると、preg_splitの返す配列に期待したものが、入りません。なぜか空文字("")が含まれます。 どうすれば、全角スペースに対応できるでしょうか?

    • ベストアンサー
    • PHP
  • 2つ以上の連続する空白文字を除去

    フォームから受け取った値の中の2つ以上の連続する空白文字を削除したいのですがどうすればいいでしょうか。 一つは区切り文字として残したいのです。 調べてみたところ splitで正規表現するとできる というサイトを見たのですが具体的に書かれていなかったのでよくわかりませんでした。 わかる方お願いします。

    • ベストアンサー
    • PHP
  • 正規表現について

    HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。  ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • split と 正規表現による分割

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=964020 にて同じような質問をしたのですが、ご回答と自分での検証で食い違いが起きたので質問させていただきます。 splitを用いた分割と正規表現を用いた分割のどちらが速いかというものです。 #####test.txt### ... <!--line--> ... <!--line--> .... ################ というファイルを$lineという変数に入れ、 ********************************************** sub seiki { my $a,$b,$c; if($line=~ /(.*)<!--line-->\n(.*)<!--line-->\n(.*)/s){ $a=$1; $b=$2; $c=$3; } ********************************************** と ********************************************** sub split { my($a,$b,$c){split("<!--line-->\n",$line);} } ********************************************** をBenchmarkモジュールを用いて、速度比較をしてみたところ、splitの方が4倍程速い結果が出ました。実際に用いたtest.txtのサイズは10KBです。 前回質問したときのご回答では、正規表現のほうが早いというご意見をいただいたのですが、本当のところはどちらなのでしょうか

    • ベストアンサー
    • Perl
  • 正規表現について

    正規表現で、「空白またはa~zの中の1文字」を表すには[ a-z]でよいのでしょうか?

  • 「/」を利用した正規表現

    PHPバージョン5.2.4を使用しています。 http://www.hoge.com/abc/f.php というURLを「/」で区切った結果を取得したいのですが、 普通にsplit('/', $url);の条件でやってしまうと http:のあとの「//」があるので、そこも分割してしまいうまくいきません・・・ この場合、スラッシュ1つで区切って3つに分割したいのです。 スラッシュが1つの場合だけ区切るという正規表現はどのようになるのでしょうか? 取得したい結果 http://www.hoge.com abc f.php

    • ベストアンサー
    • PHP