-1

ループを通過する一連の文字列からすべての括弧を削除したいと思います。私が見た中でこれを行う最良の方法は、preg_replace() を使用することです。しかし、パターンパラメータを理解するのに苦労しています。

以下はループです

    $coords= explode (')(', $this->input->post('hide'));
        foreach ($coords as $row)
        {
            $row = trim(preg_replace('/\*\([^)]*\)/', '', $row));
            $row = explode(',',$row);
            $lat = $row[0];
            $lng = $row[1];
        }

そして、これが 'hide' の値です。

    (1.4956873362063747, 103.875732421875)(1.4862491569669245, 103.85856628417969)(1.4773257504016037, 103.87968063354492)

私の知る限り、そのパターンは間違っています。別のスレッドから取得しました。パターンについて読み込もうとしましたが、取得できませんでした。私はかなり時間がないので、ネットの他の部分で他の方法を探しながら、これをここに投稿しました. 誰かが私がやろうとしていることの正しいパターンを教えてもらえますか? または、これを行う簡単な方法はありますか?

編集: ああ、preg_replace() がどのように機能するかわかりました。どうやら私はそれがどのように機能するかを誤解していたようです、情報をありがとう。

4

4 に答える 4

1

私はあなたが実際にすべての座標を抽出したいのを見ます

その場合は、preg_match_all を使用することをお勧めします。

$ php -r '
preg_match_all("~\(([\d\.]+), ?([\d\.]+)\)~", "(654,654)(654.321, 654.12)", $matches, PREG_SET_ORDER);
print_r($matches);
'
Array
(
    [0] => Array
        (
            [0] => (654,654)
            [1] => 654
            [2] => 654
        )

    [1] => Array
        (
            [0] => (654.321, 654.12)
            [1] => 654.321
            [2] => 654.12
        )

)
于 2012-11-24T10:27:33.187 に答える
1

が必要な理由が完全にはわかりませんpreg_replaceexplode()区切り文字を削除するため、最初と最後の文字列の開き括弧と閉じ括弧をそれぞれ削除するだけです。そのために使えますsubstr()

配列の最初と最後の要素を取得します。

$first = reset($array);
$last = end($array);

それが役立つことを願っています。

于 2012-11-24T10:30:30.933 に答える
0

「そして、これが $coords の値です。」

$coords が文字列の場合、 foreach は意味がありません。その文字列が入力の場合、次のようになります。

$coords= explode (')(', $this->input->post('hide'));

この行は文字列から内側の括弧を削除するため、 $coords 配列は次のようになります。

  • (1.4956873362063747、103.875732421875
  • 1.4862491569669245、103.85856628417969
  • 1.4773257504016037、103.87968063354492)
于 2012-11-24T10:25:14.953 に答える
0

パラメータはpattern正規表現を受け入れます。この関数は、正規表現に一致する元のすべての部分が 2 番目の引数に置き換えられた新しい文字列を返します。replacement

preg_replace元の文字列にそのまま使用するのはどうですか?

preg_replace('#[()]#',"",$this->input->post('hide'))

現在の正規表現を分析するには、次を照合します。

an asterisk character, 
followed by an opening parenthesis,
followed by zero or more instances of 
    any character but a closing parenthesis
followed by a closing parenthesis

もちろん、文字列を分解するとチャンクから閉じ括弧と開き括弧が削除されるため、これは決して一致しません。

于 2012-11-24T10:25:59.067 に答える