PHP では、複数の文字列 (他のユーザー名の形式) についてテキスト (ユーザーが送信したメッセージの形式) をどのようにスキャンしますか?
たとえば、ユーザーがメッセージを送信した場合、文字列「user-one」と「user-two」を「検索」して、それらの文字列を配列に送信する方法が必要です。
こんにちは、これはテスト メッセージです。@user-one、@user-two が表示されますか?
あなたが試すことができます
$message = "Hello this is a test message, can you see it @user-one, @user-two?" ;
preg_match_all("/\@[a-z\-]+/", $message,$match);
var_dump($match[0]);
出力
array (size=2)
0 => string '@user-one' (length=9)
1 => string '@user-two' (length=9)
strrpos を使用して位置を取得し、substr + strlen を使用してテキストを取得できます。例:
...
$mystring = "Hello this is a test message, can you see it @user-one, @user-two?";
$pos = strrpos($mystring, "@user-one");
if ($pos > 0) {
$str = substr($mystring, $pos, strlen("@user-one"));
}
...
質問を正しく理解していない場合は申し訳ありません。
preg_match_all('|\@(.*) |' , $userText , $match);
print_r($match[1])
$match[1]
すべてのユーザー名が含まれます。$userText
ユーザー入力テキストです。$match[0]
を含むユーザー名が必要な場合に使用します@
。
これで面倒なパターンマッチはありません!
function stringToUserArray($str) {
$remove = array(".",",","!","?");
$str = str_replace($remove, " ", $str);
$array = explode(" ", $str);
foreach($array as $string) {
if($string[0] == "@") {
$users[] = $string;
}
}
return $users;
}