2012-04-09 15 views
0

私は今のところ私の現在のニーズと同様の答えを見つけましたが、それらの文字列内の特定のエンクロージャを除いて、ルールに基づいて文字列を修正しようとしています。イムは、現在達成しようとするもののRegex - 指定されたエンクロージャー以外の文字列の変更 - PHP

例:

preg_replace("/\s*,\s*/", ",", $text) 

私は多くの場所で上記のを見つけました。文字列内のすべてのカンマの前後に空白が削除されます。

それは素晴らしいです。しかし、 ""内にあるカンマの変更を除外したい場合は、そのルールをどのように変更する必要があるかわかりません。

助けが必要ですか?ありがとう!

編集:私は私の質問を明確にしたい: 私は、二重引用符または一重引用符で見つかったカンマを除いて、削除次の文章でコンマの前と後のすべての空白をしたいと思います:

a, b , c "d, e f g , " , h i j ,k lm,nop 

期待される結果:

a,b,c "d, e f g , ",h i j,k lm,nop 
+1

を探して厥あなたはCSVファイルを読み込もうとしていますが、fgetcsv()またはstr_getcsv()を見てください –

+0

Nope:pありがとうございました – Kovo

答えて

1

これはうまくいくと思います):

function yourFunction($string) { 
    $arr = explode('"',str_replace(' ','@',$string)); 

    if (preg_match('~^("|\')~',$string)) { 
    foreach ($arr as $key=>$value) { 
     if (($key % 2) != 0) { 
     $arr[$key] = preg_replace('~\s*,\s*~',',',str_replace('@',' ',$value)); 
    } 
    } 
    } else { 
    foreach ($arr as $key=>$value) { 
     if (($key % 2) == 0) { 
     $arr[$key] = preg_replace('~\s*,\s*~',',',str_replace('@',' ',$value)); 
     } 
    } 
    } 
    $newString = implode('"',$arr); 
    $newString = str_replace('@',' ',$newString); 

    return $newString; 
} 

@は、空白のプレースホルダです。 (空白がなくても、なぜ私がそれをしたのか分かりません。私はそれがなければ私は帽子の問題があることを知っています)

あなたの文字列が "/"で始まっているかどうかをチェックする "preg_match"それ以外の場合は他人の/「すべての第二のエントリが2の内部にあるSTHとforeachの中にロジックの。他。

文字列が始まる場合/」」。

ホープyoureの場合

+0

実際にはうまくいきます。その私が得た最も近い。 1つの欠点:@のインスタンスは空のスペースに置き換えられます。私はこれを別のやり方で乗り越えることができると思います。努力ありがとう! – Kovo

+1

それはあなたが望んでいたものではありませんか?ホワイトスペースに変換される@は、一重引用符と二重引用符の間にあるものです – Mohammer

+0

これは問題ありません!私はあなたの関数を渡す前にすでに文字列に存在していた@文字を意味していました:pいずれにせよ、うまくいきました、ありがとう! – Kovo

2

http://ideone.com/bRlYz

$text = '"a" ,  " , b"'; 

$result = preg_replace("/(?<=\")\s*,\s*(?=\")/", ",", $text); 

var_dump($result); 

しかし、このような場合には失敗します:" , " - カンマで区切られたスペースで引用符で囲まれ、他の文字は含まれていません。

+0

これはうまくいって、ありがとう! – Kovo

+0

これはあなたが望むものの反対ではありませんか?今は ""内のすべてのコンマを編集していますが、 ""以外のコンマは編集していません。 – Mohammer

+0

@Mohammer: "しかし、除外したい場合は、そのルールをどう修正すればい​​いのか分かりません。" – zerkms

関連する問題