2013-01-09 33 views
0

如何獲取字符串中某個字符('@')的值?我有這個代碼,但它不工作; 將只有字母數字字符和/或空格。如何在PHP和RegEX中獲得特定字符後的值?

$data = 'Someone @Will Be There'; 

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

所有我想得到的是「會在那裏」,如果@存在於字符串中。
謝謝

編輯:非常抱歉我的錯誤。我不想刪除'@',我需要得到什麼那。對不起,人。

+0

http://php.net/strpos和http://php.net/strstr – Gordon

+0

@ Abhik更改我的代碼以反映您的更改... – keyboardSmasher

回答

0

第一組是在$match[1],而不是在$match[0]

你的代碼更改爲:

$data = 'Someone @Will Be There'; 
preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match); 
return $match[1]; 
0

您可以使用功能strpos()用於此目的。它在一個字符串中搜索一個子字符串 - 或者至少一個char - 並返回該子字符串的第一個位置。

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

當在字符串中找不到子字符串時,該方法返回false。

在php中有strpos()有常見的陷阱。檢查以下示例:

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

雖然字符串中包含at,但未找到'@'輸出。這是因爲PHP中的數據輸入較弱。前面的strpos()調用將返回int(0),因爲它是字符串中的第一個字符。但是,這將使如果失敗,除非你做的事:

if(strpos('@stackoverflow', '@') === FALSE) { 
    echo 'the string contains no @'; 
} 
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]; 
0

你不需要使用通常很慢的正則表達式來執行此操作。只要: return str_replace('@','',$ data);

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; 
    } 
} 
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 
0

你問題似乎含糊不清,如果你想從字符串中刪除'@',那麼你c使用str_replace的答案。 如果你想要'@'後的值,你應該在自己的代碼中檢查$ match [1]。

相關問題