4

私はこれを理解するのに少し苦労しています。

次のようなデータ行があります。

$data = "Alpha Natural Resources Inc COM 02076X102 2,077 45,700 x

複数のスペースがある場合は、この行を「爆発」させようとしています。私が遭遇した問題は、1 つ以上のスペースがある行を爆破する解決策しか見つけられなかったことです。複数のスペースがあるこの行を爆破しようとしていますが、1 つのスペースだけではありません (したがって、たとえば、Alpha Natural Resources Inc が一緒にいること)。

答えがpreg_splitにあることは知っていますが、適切なコードがわかりません..

ありがとう

4

5 に答える 5

9

preg_split('/\s\s+/', $data) これは、return、tab などの空白の倍数と一致しpreg_split('/ +/', $data)ますが、スペースバーからの空白のみと一致します。\s は空白文字を選択します。複数の空白を削除する

于 2011-11-01T01:34:51.933 に答える
9

これは、複数のスペース、単一のスペース、および新しいタブをクリックしてデータを分割する場合にも機能します。

preg_split('/\s+/', $data)

于 2018-04-02T06:08:37.867 に答える
2

これは古い投稿ですが、完全を期すために追加すると思います。

$arr = preg_split('/[\s][\s]{1,3}/', $string,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);



これには、より多くのオプションがあります。検索するスペースの正確な数をカスタマイズする括弧内を覚えておいてください...
/[\s][\s]{1,4}/
または最初の一致の後に単に 1 回以上 /[\s][\s ]+/ また、出力の処理を容易にするために、これで設定するフラグがあることも知っておいてください。

PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE

1 つは空の結果を返さないようにし、もう 1 つは返されたコンテンツに一致したコンテンツを含めます。

他にも ( http://php.net/preg-split ) オフセットをキャプチャするものがありますが、出力構造を少し変更します。
//////////////////// UPDATE /////////////// /(\w+\W+)
を使用することになりました
/
//単語に一致し、それと空白を取得して返します。

何らかの理由で preg_split はスペースを置き換えません。
ある時点で機能し、その後いくつかの編集後に機能しなかったため、私にとっては見知らぬ人です。それが機能していたときに戻って、テストページとライブページで機能しました. トラブルシューティングとバムへの編集の追加を開始し、どちらも結果に空白を返しません。これは私にとって素晴らしくシンプルに機能しました

于 2015-04-08T16:33:46.970 に答える
0

これはうまくいくはずです:

preg_split('/  +/', $data)
于 2011-11-01T01:27:29.450 に答える
0

これを実現する最も簡単な方法は、\s空白を表す which を使用することです。少なくとも 2 つの ( \s\s) がある場合にのみ動作させるには、中括弧表記を使用して 2 つ以上を指定するのが最善です。中括弧で 2 番目の引数を指定しないと、2 以上のことを意味します。

preg_split('/\s{2,}/', $data);

このコードをテストするには、次を試してください

$data = 'hello  here  is  a  test! Hello World';

$p = preg_split('/\s{2,}/', $data);

die(var_dump($p));

次のように出力します。

array(5) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(4) "here"
  [2]=>
  string(2) "is"
  [3]=>
  string(1) "a"
  [4]=>
  string(17) "test! Hello World"
}
于 2018-04-02T06:44:11.603 に答える