2011-02-04 10 views
2

Hey all。私はコンマで区切られた一連の名前を持っています。私は区切り文字としてコンマを使って名前の配列に名前の文字列を展開しています。私はRegExがコンマの後にのみ空白文字(もしあれば)を削除する必要があり、姓と名の間の空白は削除しません。だから、例としてPHP RegEx文字列のコンマの後に空白を削除する

$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse"; 

はラルフKramdenの前にスペースを参照してください?名前の間のスペースではなく、スペースを削除する必要があります。そして、名前が削除される前に他のスペースも必要です。

P.S .:空白とこの状況に関する面白い動作に気付きました。

ラインそうのようなエコーを壊さない:

$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse"; 

$nameArray = explode(",", $nameStr); 

foreach($nameArray as $value) 
{ 
    echo $value; 

} 

結果は次のとおりです。スポンジBobBartシンプソンラルフKramdenUncle ScroogeMickeyマウス

お知らせまだ空白以下の例を見てみましょうそこの前にRalph Kramden

ただし、abovを改行するとき電子エコーそうのように:

echo $value . "<br />"; 

出力は次のようになります。

スポンジボブ

バートシンプソン

ラルフKramden

アンクルスクルージ

ミッキーマウス

すべての名前は、名前の前に空白がないように並べられています。

したがって、文字列の先頭の空白に関するPHPの動作は正確に何ですか?

乾杯。返信ありがとう。ホワイトスペースの再

$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse"; 

$nameArray = explode(",", $nameStr); 

foreach($nameArray as $value) 
{ 
    echo trim($value); 

} 

EDIT

PHPの動作が適切な文字として扱い、それがあなたに言われているものを行うことですどんな小さな問題を解決するために正規表現を使用しての今日の固定には何

答えて

3

。 HTMLの振る舞い(あるいは少なくともウェブブラウザの振る舞い)はむしろ違います...その違いを学び理解する必要があります

+0

ジョブのセキュリティは?結局のところ、正規表現を使って問題を解決すると、すぐに2つの問題、つまり瞬間的な作業が発生します。 –

+0

@Marc B-:)私の仕事のセキュリティに悪影響を与えるので、私たちの雇用保障に悪影響を及ぼしています –

+0

まあ、 'preg_split'を使う方が' explode'と 'trim'を使うよりも適切だと思います。単純な正規表現、なぜそうしないのですか? – NikiC

0

PHPは変数として解析しない限り、文字列に含まれるものを気にすることはできません補間。空白は他の文字と同じように、asciiやunicodeの値は "blank"として表示されます。

これらのカンマ区切りの後のスペースをどのように置き換えますか?その後、

$str = str_replace(', ', ',', $str); 
         ^--space 

それはあなたのRalphの名前の前にスペースをキャッチれていない場合は、最も可能性が高い何でもスペース文字(ASCII 32)がありません。あなたはそれが何であるかを表示することができます:

echo ord(substr($nameArray['index of Ralph here'], 0, 1)); 
+0

ポスターは複数の空白を置き換えたいとは主張しませんが、あなたの解決策は正確な空白1つのみで動作するので、 "...、Ralph"は置き換えられません。 –

0

トリム機能で試しましたか?

$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse"; 

$nameArray = explode(",", $nameStr); 

for($i = 0; $i < count($nameArray); $i++) { 
    $nameArray[$i] = trim($nameArray[$i]; 
} 
$newNameStr = implode(',', $nameArray); 

あなたは正規表現でこれを行うことができますが、それはあなたが正規表現と非常に経験豊富ではありませんように、それは間違っているとき、彼らは、パフォーマンスのかなりの部分を要するので、あなたが、それらを使用するべきではありませんに見えますので、。

1

これは実行可能な正規表現のソリューションですが、他の人が先に指摘してきたように、簡単なtrim()はあなたがすでに持っているものと仕事をする

$nameStr = preg_replace("/,([\s])+/",",",$nameStr); 
$nameArray = explode(",", $nameStr); 

を試してみてください。

0

なぜあなたはpreg_splitなのですか?

$names = preg_split('~,\s*~', $names); 
0

簡単な解決策は、正規表現を使用して回避しtrim関数を適用することです。

$nameStr = 'Bart Simpson, Lisa Simpson,Homer Simpson, Madonna'; 
$names = explode(',', $nameStr); 
foreach($names as &$name) { 
    $name = trim($name); 
} 

//あなたが持っている通りの名前は、1つの単語だけ

3

あるとき、これはまた、つまずくはありませんコンマの後の空白を残すことができることを考慮して、カンマの後にのみ白い空白を削除するように言います。

また、以下使用することができます。この後

$nameStr = "Sponge Bob, Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse"; 

while (strpos($nameStr, ', ') !== FALSE) { 
    $nameStr = str_replace(', ', ',', $nameStr); 
} 
echo $nameStr; 

、あなたは単にそれを爆発することができます

$allNames = explode(',', $nameStr); 

は、そうでない場合は、マイケルによって正規表現は非常に良いです。