2

私はこのようなPHPで文字列を持っています -

$str = "Foo var1='Abook' var2='A book'";

この文字列を、''引用符内の単語を単一のステートメントとして扱う配列に変換しようとしています (つまり、引用符内のスペースは無視され''ます)。だから私の配列は次のようになります

Array
(
   [0] => "Foo",
   [1] => "var1='Abook'",
   [3] => "var2='A book'"
)

配列は、引用符の外側 のスペースで文字列を区切って形成されることに注意してください''。ただし、引用符の内側ではありません。

これを達成できるように、良い preg 関数を教えてください。

4

4 に答える 4

1

これはサンプルの入力と出力には機能しますが、一般的な目的には十分ではないかもしれません。それは少なくとも出発点です:

<?php
  $str = "Foo var1='Abook' var2='A book'";
  $res = array();

  $bits = explode(' ', $str, 2);

  $res[] = $bits[0];

  if (preg_match_all("/\w+='[^']+'/", $bits[1], $matches) !== false) {
    $res = array_merge($res, $matches[0]);
  }

  print_r($res);
?>
于 2013-03-15T20:55:50.700 に答える
1

これは私の問題を解決しました-

$str= 'word1 word2 \'this is a phrase\' word3 word4 "this is a second phrase" word5 word1 word2 "this is a phrase" word3 word4 "this is a second phrase" word5';

$regexp = '/\G(?:"[^"]*"|\'[^\']*\'|[^"\'\s]+)*\K\s+/';

$arr = preg_split($regexp, $str);

print_r($arr);

元のリンクはこちら. 明らかに、正しい正規表現だけが必要でした。問題が解決しました!!!

于 2013-03-15T20:59:04.040 に答える
0
$s = "Foo var1='Abook' var2='A book'";
preg_match_all("~(?:(?<=^| )[^']+(?= |$)|(?<=^| )[^']+'[^']+'(?= |$))~", $s, $m);
print_r($m[0]);

Outputs:
Array
(
  [0] => Foo
  [1] => var1='Abook'
  [2] => var2='A book'
)
于 2013-03-15T21:05:50.117 に答える
0

ここで必要なもの:

$array = explode(' ', $str);

アップデート

これを試すことができます:

preg_match_all('/\'([^\']+)\'/', $string, $matches);
$matches = $matches[1];

' 'スペースを置換する間のすべてのテキストを取得 し{SPACE} て、文字列が次のように見えるようにします。スペースで$str = "var1='A{SPACE}book'"行うことができます。explode()

うーん?

于 2013-03-15T20:47:38.873 に答える