0

文字列内の特定の文字 (私の場合は「@」) の後の値を取得するにはどうすればよいですか? このコードはありますが、機能していません。英数字および/またはスペースのみがあります。

$data = 'Someone @Will Be There';

preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match [0];

その @ が文字列に存在する場合、「Will Be There」を取得したいだけです。
ありがとう

編集:私の間違いで大変申し訳ありません。その「@」を削除したくありません。What are After that を取得する必要があります。もう一度ごめんなさい、人々。

4

7 に答える 7

1

あなたの変更を反映するように私のコードを変更しました...

$data = 'Someone @Will Be There';
$character = '@';

if ($string = stringAfterCharacter($data, $character)){
    echo $string;
}else{
    echo "Character: '$character' not found.";
}


function stringAfterCharacter($data, $character='@'){
    if (($pos = strpos($data, $character)) !== false){
        return substr($data, $pos + 1);
    }else{
        return false;
    }
}
于 2013-01-09T05:48:50.263 に答える
0

最初のグループは にあり$match[1]、 にはありません$match[0]

コードを次のように変更します。

$data = 'Someone @Will Be There';
preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match[1];
于 2013-01-09T09:40:03.387 に答える
0

strpos()その目的のために関数を使用できます。文字列内の部分文字列 (または少なくとも文字) を検索し、その部分文字列の最初の位置を返します。

$position = strpos('I am @ the penthouse', '@');

文字列内に部分文字列が見つからない場合、メソッドは false を返します。

PHP にはよくある落とし穴がありますstrpos()。次の例を確認してください。

if(!strpos('@stackoverflow', '@')) {
  echo 'the string contains no @';
 }

は、文字列に at が含まれていますが、'@' が見つからなかったと出力します。これは、PHP のデータ型付けが弱いためです。前のstrpos()呼び出しは、文字列の最初の文字であるため、int(0) を返します。しかし、そうしない限り、これは if を失敗させます:

if(strpos('@stackoverflow', '@') === FALSE) {
   echo 'the string contains no @';
}
于 2013-01-09T05:42:50.860 に答える
0

単純な文字列置換方法を使用してこれを試してみてください。

$data = 'Someone @Will Be There';
$result = str_replace('@','',$data); // result is: Someone Will Be There

これを使用しないでください:

//preg_match ("/@([a-zA-Z0-9]*)/", $data, $match);
//return $match [0];
于 2013-01-09T05:43:52.940 に答える
0

これを行うために、一般的に遅い正規表現を使用する必要はありません。ただやるだけです: return str_replace('@', '', $data);

于 2013-01-09T05:45:07.053 に答える
0

これにより、文字列から記号が削除されます

$data = 'Someone @Will Be There';
echo preg_replace("/([^A-Za-z0-9 ]*)/", '', $data); //Add character in the pattern if not to be filtered

出力:

Someone Will Be There
于 2013-01-09T06:01:22.093 に答える
0

質問があいまいに思えます。文字列から '@' を削除したい場合は、str_replace で回答を使用できます。「@」の後の値が必要な場合は、独自のコードで $match[1] を確認する必要があります。

于 2013-01-09T06:26:12.420 に答える