我有一个单词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] => )
但没有得到确切的文字。请帮帮我。
由于 茅
答案 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]