如何在包含冒号(:)的php中获取单词?

时间:2014-11-12 05:14:39

标签: php regex search preg-match

我有一个单词Hello How are you :chinu i am :good我希望得到包含:的单词:chinu:good

我的代码:

<?php
  //$string='Hello How are you :chinu i am :good';
  //echo strtok($string, ':');  

  $string='Hello How are you :chinu i am :good';
  preg_match('/:([:^]*)/', $string, $matches);
  print_r($matches);
?>

上面的代码我得到Array ( [0] => : [1] => )但没有得到确切的文字。请帮帮我。

由于 茅

3 个答案:

答案 0 :(得分:6)

:\S+

试试这个。看看演示。

http://regex101.com/r/tF5fT5/43

$re = "/:\\S+/im";
$str = "Hello How are you :chinu i am :good";

preg_match_all($re, $str, $matches);

答案 1 :(得分:6)

要获取所有匹配项,您需要使用preg_match_all()。至于你的正则表达式,你的否定类是倒退的;匹配任何字符::^“零或更多”次,并且不符合您的预期。

您在评论中说明了两次打印“记录”,这是因为您打印$matches数组本身而不是打印仅显示匹配结果的索引组。

preg_match_all('/:\S+/', $string, $matches);
print_r($matches[0]);

答案 2 :(得分:3)

因此,您需要执行以下操作以匹配字符到空格:

preg_match_all('/:[^ ]+/', $string, $matches);

或者如果您正在寻找仅限字母的字符,则可以使用以下内容:

preg_match_all('/:[A-Za-z]+/', $string, $matches);

此时您要查找的数组将为$matches[0]

print_r($matches)

print_r($matches[0])

您始终可以使用以下内容重新分配matches子数组:

$matchesArray = $matches[0]