我有一个文本文件,其中每一行都是一个条目。 每一行都有一些用空格分隔的单词和带有括号
的条目末尾的2-3个单词例如
asd asdasd asdasd {m} [jsbbsdfb]
如何在php中获得以下结果
$data[0]="asd asdasd asdasd"
$data[1]= "{m}"
$data[2]= "[jsbbsdfb]"
答案 0 :(得分:1)
$regex = '/([a-zA-Z ]*) (\{[a-zA-Z]\}) (\[[a-zA-Z]+\])/';
$yourText = "asd asdasd asdasd {m} [jsbbsdfb]";
$lines = explode("\n", $yourText);
foreach($lines as $line) {
$result = array();
preg_match($line, $regex, $result);
print_r($result);
}
你当然可以调整正则表达式:)
答案 1 :(得分:1)
您可以使用substring
和strpos
查找正确的部分,也可以使用preg_match
(正则表达式),两者都有自己的(dis)优势。使用preg_match
你可以做到这一点只有一行,但它相对较慢而且不易使用。我会做这样的事情:
while(/* $line is next line available */) {
$brace_position = strpos($line, '{');
$bracket_position = strpos($line, '[');
$data = array(
substr($line, 0, ($brace_position - 1),
substr($line, $brace_position, ($backet_position - $brace_position - 1)),
substr($line, $bracket_position)
);
}
上面提供的另一个答案,也是正确的,但是只有,如果每一行的长度完全相同(即空格的单词数量相同)。 check123的答案不是你问题的正确答案。
请参阅 strauberry的回答,了解我在上面提到的正则表达式。
答案 2 :(得分:0)
$ a = explode(“”,$ string);
$ a [1] //将存储字符串的第一个单词
$ a [2] //依此类推,直到字符串结束
确定!我上面写错了。你可能想尝试类似的东西:
$str = "asd asdasd asdasd {m} [jsbbsdfb]";
$k=strlen($str);
for($i=0;$i<$k;$i++) {
$char = substr($str,$i,1);
//do your operation here on
}
并循环遍历字符串的每个字符并按需运行。
答案 3 :(得分:0)
几种方式......你可以尝试在空间上爆炸......然后将前3个阵列元素连接在一起
类似的东西:
$yourString = "asd asdasd asdasd {m} [jsbbsdfb]";
$elements = explode ( " " , $yourString);
$string1 = $elements[0] . $elements[1] . $elements[2];
$string2 = $elements[3];
$string3 = $elements[4];
如果你想要
,你很明显可以将值设置为数组的前3个元素即:
$yourString = "asd asdasd asdasd {m} [jsbbsdfb]";
$elements = explode ( " " , $yourString);
$elements[0] = $elements[0] . $elements[1] . $elements[2];
$elements[1] = $elements[3];
$elements[2] = $elements[4];
答案 4 :(得分:0)
$x = "asd asdasd asdasd {m} [jsbbsdfb]";
$a1 = strpos($x, '{');
$a2 = strpos($x, '}', $a1);
$b1 = strpos($x, '[', $a2);
$b2 = strpos($x, ']', $b1);
$data = array();
$data[] = substr($x, 0, $a1-1);
$data[] = substr($x, $a1+1, $a2-$a1-1);
$data[] = substr($x, $b1+1, $b2-$b1-1);
var_dump($data);