子字符串拆分 - PHP

时间:2015-07-01 19:13:44

标签: php substring

所以,我想这是一个非常简单的概念,但我不确定如何实现我的预期结果。我想要的是,以“@”符号开头的单词输出时加<span>包围它们。

假设以下是整个字符串:

  Mark希望新应用程序在周五发布,但有些资产需要精炼才能符合主题@design_team。

我如何捕捉......

  

@design_team

...子字符串,请记住,子字符串中不应考虑下划线以外的字符,以帮助保留格式。

如果可以使用PHP,请告诉我,如果可以,请告诉我们。

4 个答案:

答案 0 :(得分:8)

使用preg_replace

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

\w匹配单词字符(字母,数字,下划线),+使其匹配一系列字符。在替换字符串$0中获取匹配的子字符串。

答案 1 :(得分: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
)

答案 2 :(得分: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

答案 3 :(得分: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";
}