如何捕获以#标签开头的子串?

时间:2017-06-30 12:11:44

标签: php regex preg-match-all substring

我正在寻找使用正则表达式,preg_match()preg_split()或任何其他方式从文本中分割单词的PHP代码。

$textstring="one #two three #four #five";

我需要将#two#four#five保存为数组元素。

3 个答案:

答案 0 :(得分:1)

试试这个:

$text="one #two three #four #five";
$parts = array_filter(
    explode(' ', $text), // split into words
    function($word) {
        // filter out all that don't start with '#' by keeping all that do
        return strpos($word,"#")===0; 
        // returns true when the word starts with "#", false otherwise
    }  
);
print_r($parts);

您可以在此处查看:https://3v4l.org/YBnu3

您可能还想阅读array_filter

答案 1 :(得分:0)

#符号后面使用否定字符类以获得最高模式效率:

模式:(Demo

#[^ ]+  #this will match the hashtag then one or more non-space characters.

代码:(Demo

$in='one #two three #four #five';
var_export(preg_match_all('/#[^ ]+/',$in,$out)?$out[0]:'failed');  // access [0] of result

输出:

array (
  0 => '#two',
  1 => '#four',
  2 => '#five',
)

答案 2 :(得分:-1)

尝试按此分割:\b #

preg_split("/\\b #/", $text)