2015-07-01 162 views
2

所以,我想這是一個非常簡單的概念,但我不確定如何實現我的預期結果。我想要的是用'@'符號開頭的文字,用包含它們的<span>輸出。子字符串拆分 - PHP

比方說,下面是整個字符串:

馬克希望新的應用程序上週五發布,但一些資產需要細化,使它們貼合主題@design_team。

我將如何捕捉...

@design_team

...子串,銘記不是下劃線其他字符不應該被佔子字符串,以幫助保持格式。

請讓我知道這是否可能與PHP,如果是這樣,如何。

+0

你需要使用正則表達式和編寫模式匹配'前綴任何workd @ ' –

回答

8

使用preg_replace

$string = preg_replace('/@\w+/', '<span>$0</span>', $string); 

\w匹配單詞字符(字母,數字,下劃線),+使得它們匹配的序列。並在替換字符串$0獲取匹配的子字符串。

+0

完美,謝謝Barmar! –

1

使用preg_match()

$str = "Mark wants the new app to be released on Friday, but some assets need refining so that they fit the theme @design_team."; 
preg_match('/\@[a-zA-Z_]+/', $str, $matches); 
print_r($matches); 

輸出是

Array 
(
    [0] => @design_team 
) 
+0

我知道這會打印出@design_team子字符串,但是我如何將它作爲字符串本身的一部分進行打印,以便它的格式爲:

Mark要...符合主題 @ design_team

+0

沒關係,Barmar已經回答了這個解決方案。不管怎樣,謝謝你。 –

1

您可以使用正則表達式來實現這一目標。這裏有一個例子:

$string = 'Hello @php and @regex!'; 

$matches = []; 
preg_match_all('/@(\w+)/', $string, $matches); 

var_dump($matches); 

輸出:

array(2) { 
    [0] => 
    array(2) { 
    [0] => 
    string(4) "@php" 
    [1] => 
    string(6) "@regex" 
    } 
    [1] => 
    array(2) { 
    [0] => 
    string(3) "php" 
    [1] => 
    string(5) "regex" 
    } 
} 

延伸閱讀:preg_match_all

1

我認爲這將是更容易,如果你有每串多個@words使用正則表達式

$string = '@Mark wants the new app to be released @Friday, but it needs some @refining'; 
$didMatch = preg_match_all('/(@[^\W]+)/', $string, $matches); 

if($didMatch) { 
    echo "There were " . count($matches[0]) . " matches: <br />"; 
    print_r($matches[0]); 
} else { 
    echo "No @words in string!\n"; 
}