2017-04-05 79 views
1

我想從字符串拆分單詞。例如,我的字符串是「在上帝的#名稱」,我只需要「名稱」! 但是當我使用這個snipet,還給我 「上帝的名字」Php - 通過在字符串中爆炸拆分特定字

$string = "In the #name of god";  
$word = explode('#', $string); 
echo $word; 
+1

'$ word'是數組,當您回顯它時,您將看不到'name of god' –

+0

您正在使用導出錯誤的上下文。 'explode()'函數將一個字符串分解成一個數組。 – webpic

+0

@u_mulder,Array([0] =>在[1] =>上帝的名字) – Ehsan

回答

5
$string = "In the #name of god"; 

// Using `explode` 
$word = @reset(explode(' ', end(explode('#', $string)))); 
echo $word; // 'name' 

// Using `substr` 
$pos1 = strpos($string, '#'); 
$pos2 = strpos($string, ' ', $pos1) - $pos1; 
echo substr($string, $pos1 + 1, $pos2); // 'name' 

注:reset函數之前@字符是Error Control Operators。當使用帶有非參考變量的end函數時,它避免顯示警告消息,並且是的,這是不好的做法。您應該創建自己的變量並傳遞給end函數。就像這樣:

// Using `explode` 
$segments = explode('#', $string); 
$segments = explode(' ', end($segments)); 
$word = reset($segments); 
echo $word; // 'name' 
0

編輯

對不起,我只是readed是錯誤的。

Explode將字符串轉換爲數組。 所以你的輸出會導致[「在」,「神的名字」]。如果你想聽到它的話,你需要更具體地說明它如何工作。如果你只想要在標籤後面看到第一個單詞,你應該使用strpossubstr

$string = "In the #name of god"; 
$hashtag_pos = strpos($string, "#"); 
if($hashtag_pos === false) 
    echo ""; // hashtag not found 
else { 
    $last_whitespace_after_hashtag = strpos($string, " ", $hashtag_pos); 
    $len = $last_whitespace_after_hashtag === false ? strlen($string)-($hashtag_pos+1) : $last_whitespace_after_hashtag - ($hashtag_pos+1); 
    echo substr($string, $hashtag_pos+1, strpos($string, " ", $len)); 
} 
+0

這絕對不會返回'名稱' –

+0

行動,我真的錯過了那部分。我在做這個工作。 –

+0

@Daan修復它。 –

1

嘗試正則表達式和preg_match

$string = "In the #name of god"; 
preg_match('/(?<=#)\w+/', $string, $matches); 

print_r($matches); 

輸出:

Array ([0] => name) 
+0

這也返回一個數組?在 – RiggsFolly

+0

這個問題中請求了一個字符串@RiggsFolly是的,但'$ matches [0]'將會有必需的字符串,並且複雜度非常小。 –

+1

也會建議使用'preg_match_all'來獲得所有的發生 – knetsi

0

有幾個選項(還的preg_match將有助於爲 '#' 的多個實例)

<?php 
//With Explode only (meh) 
$sen = "In the #name of god"; 
$w = explode(' ', explode('#',$sen)[1])[0]; 

echo $w; 

//With substr and strpos 
$s = strpos($sen , '#')+1; // find where # is 
$e = strpos(substr($sen, $s), ' ')+1; //find i 
$w = substr($sen, $s, $e); 

echo $w; 

//with substr, strpos and explode 
$w = explode(' ', substr($sen, strpos($sen , '#')+1))[0]; 
echo $w;