我有一个包含以下内容的字符串
[text1] some content [text2] some
content some content [text3] some
content
“[textn]”是有限的,也有特定的名称。我想将内容放入数组中。有什么想法吗?
答案 0 :(得分:3)
如果你不想使用正则表达式,那么strtok()可以在这里做到这一点:
strtok($txt, "["); // search for first [
while ($id = strtok("]")) { // alternate ] and [
$result[$id] = strtok("["); // add token
}
答案 1 :(得分:1)
preg_match或preg_match_all,如果你想要正则表达式,你需要给我们一个例子。
$string = "[text1] some content [text2] some content some content [text3] some content";
preg_match_all("#\[([^\[\]]+)\]#is", $string, $matches);
print_r($matches); //Array ( [0] => Array ( [0] => [text1] [1] => [text2] [2] => [text3] ) [1] => Array ( [0] => text1 [1] => text2 [2] => text3 ) )
非递归的。
答案 2 :(得分:1)
在php中有一个用regexp分隔符分割字符串的功能,比如preg_match,preg_match_all,查找它们。
如果你有一个单词列表,你可以像这样分割字符串(显然,可以写得更好):
$words = array('[text1]','[text2]','[text3]');
$str = "[text1] some content [text2] some content some content [text3] some content3";
for ($i=0; $i<sizeof($words) ; $i++) {
$olddel = $del;
$del = $words[$i];
list($match,$str) = explode($del,$str);
if ($i-1 >= 0) { $matches[$i-1] = $olddel.' '.$match; }
}
$matches[] =$del." ".$str;
print_r($matches);
这将输出:Array ( [0] => [text1] some content [1] => [text2] some content some content [2] => [text3] some content3 )
答案 3 :(得分:0)
是[和]字符串的一部分还是只是用它们突出显示要提取的部分?如果不是,那么你可以使用
if (preg_match_all("/\b(text1|text2|text3|foo|bar)\b/i", $string, $matches)) {
print_r($matches);
}