2017-09-20 8 views
-1

私の文字列は:こんにちは私の名前はabcですカンマ区切り文の最初の単語

"Hi Name"を出力したいと思います。

[カンマ区切りの最初の単語]。

しかし、時には私の文章も私のこんにちはすることができ、「名前は、ABCで」

[文自体が、その後の文章は、「」で囲まれコンマを持っている場合]。

この場合の出力も「Hi Name」である必要があります。

これまでのところ、私はあなたの結果を達成するためにexplodeを使用してIGINORE ' OR "使用するため

$str = 'hi my,"name is abc"'; 
$result = explode(',',$str); //parsing with , as delimiter 
$first = explode(' ',$result[0]); 
$first = $first[0]; 

$second = explode(' ',$result[1]); 
$second = trim($second[0],"'\""); 
$op = $first." ".$second; 
echo ucwords($op); 

EDITまたはあなたがそれをしたい場合をトリミングすることができ、この

$str = "hi my,name is abc"; 
$result = explode(',',$str); //parsing with , as delimiter 
foreach ($result as $results) { 
    $x = explode(' ',$results); // parsing with " " as delimiter 
     forach($x as $y){} 
    } 
+0

出力Hi Name、すべての入力に存在します "名前は" ??それは "name is xxxx"のようなものですか? – BSB

+0

@BSBいいえ..この文字列は単なる例です。 – Ank

+0

@Ankこれを試してみてください。https://eval.in/865129 –

答えて

1

を行ってきましたすべての区切り値はforeachを使用

$str = 'hi my,"name is abc"'; 
$result = explode(',',$str); //parsing with , as delimiter 
$op = ""; 
foreach($result as $value) 
{ 
    $tmp = explode(' ',$value); 
    $op .= trim($tmp[0],"'\"")." "; 
} 
$op = rtrim($op); 
echo ucwords($op); 
+0

私は最後に末尾のスペースを得ます。 2番目の解決方法については – Ank

+0

編集してみてください。 righttimeからスペースを削除するために 'rtime'を追加しました –

+0

はい..私もその編集を行いました.. trim($ op、" ") – Ank

0

基本的には、explode、str_posなどを使用してこの問題を解決するのは難しいです。この場合は、ステートマシンアプローチを使用する必要があります。

<?php 
function getFirstWords($str) 
{ 
    $state = ''; 
    $parts = []; 
    $buf = ''; 
    for ($i = 0; $i < strlen($str); $i++) { 
     $char = $str[$i]; 

     if ($char == '"') { 
      $state = $state == '' ? '"' : ''; 
      continue; 
     } 

     if ($state == '' && $char == ',') { 
      $_ = explode(' ', trim($buf)); 
      $parts[] = ucfirst(reset($_)); 
      $buf = ''; 
      continue; 
     } 
     $buf .= $char; 
    } 
    if ($buf != '') { 
     $_ = explode(' ', trim($buf)); 
     $parts[] = ucfirst(reset($_)); 
    } 

    return implode(' ', $parts); 
} 


foreach (['Hi my, "name is, abc"', 'Hi my, name is abc'] as $str) { 
    echo getFirstWords($str), PHP_EOL; 
} 

これます二回

Demo

関連する問題