-1

特定の文字列を特定の形式で置き換えたい。違いを理解するには、強調表示されたフレーズを参照してください。

'67、Yoga Pura、"15440 N. 7th Street、Suite 1"、Phoenix、AZ、85022、-112.066286,33.627028,26 '

の中へ

'67、Yoga Pura、15440 N. 7th Street Suite 1、Phoenix、AZ、85022、-112.066286,33.627028,26 '

二重のqoutesで囲まれたフレーズのコンマを削除しようとしています。置き換える方法は知っていますが、このフレーズ「15440 N. 7th Street、Suite1」を変数に設定する方法がわかりません。

$lines = preg_replace('/"[^"]+"/', 'new formatted text', $lines);

助けてください

4

5 に答える 5

2

正規表現でそれを行う別の方法:

$str = '67,Yoga Pura,"15440 N. 7th Street, Suite ",Phoenix,AZ,85022,-112.066286,33.627028,26';
echo preg_replace ( '#"(.*?),(.*?)"#', '$1$2', $str );

出力:

67,Yoga Pura,15440 N. 7th Street Suite 1,Phoenix,AZ,85022,-112.066286,33.627028,26
于 2013-03-20T07:36:49.077 に答える
1

二重引用符の間のすべてのセグメントを一致させてから、コールバック関数を使用してそれらから二重引用符/カンマを取り除くことができます。

$string = '67,Yoga Pura,"15440 N. 7th Street, Suite 1",Phoenix,AZ,85022,-112.066286,33.627028,26';

function strip_commas($str) {
  return str_replace(array(',', '"'), '', $str[0]);
}

$string = preg_replace_callback('/".*?"/', "strip_commas", $string);
于 2013-03-20T07:32:02.210 に答える
1

これを試して:

$text = preg_replace('/^(.*)"([^"]*),([^"]*)"(.*)$/', '${2}${3}', $text);

間の部分を分離し",

またはこれ:

$text = preg_replace('/"([^"]*),([^"]*)"/', '${1}${2}', $text);

,間を削除するだけ"です。

うまくいくようです

ここでの実例

于 2013-03-20T07:33:41.303 に答える
0

おそらくいくつかの簡単なコールバックスライスがあります'nマージ1行-これは不思議ですが、まっすぐにやってみましょう:

$row = '67,Yoga Pura,"15440 N. 7th Street, Suite 1",Phoenix,AZ,85022,-112.066286,33.627028,26';
$parsed = str_getcsv($row);
$parsed2 = array();
$i = 0;

while ($col = array_shift($parsed)) {
    array_push($parsed2, str_replace(',', '', $col));
}

https://ignite.io/code/51496970ec221ee821000003

もちろんstr_getcsv()、これは、文字列からCSV行を解析する最も簡単な方法を使用しています(PHP> = 5.3.0の場合)。

少し短い:

$row = '67,Yoga Pura,"15440 N. 7th Street, Suite 1",Phoenix,AZ,85022,-112.066286,33.627028,26';
$parsed = str_replace(',', '', str_getcsv($row));

print_r($parsed);

echo implode(',', $parsed);

https://ignite.io/code/51496b2bec221ee821000004

于 2013-03-20T07:47:47.657 に答える
0

先読みを使用できます

/,(?=(([^"]*"[^"]*"[^"]*[^"]*"[^"]*)+|[^"]*"[^"]*)$)/
       ----------------------------  _ ----------
                   |                 |       |->matches a single odd " till end
                   |                 |->OR
                   |-> matches 1 to many occurrences of 3 " till end

したがって、これは奇数の後に続く,場合にのみ一致します"


明らかに、これはネストされた場合は機能しません"

于 2013-03-20T07:31:42.070 に答える