我有一个文本文件,其中每一行都是一个条目。每行都有一些用空格分隔的单词,在条目末尾有2-3个单词,括号为
例如。
asd asdasd asdasd {m} [jsbbsdfb]
如何在php中获得以下结果
$data[0]="asd asdasd asdasd"
$data[1]= "{m}"
$data[2]= "[jsbbsdfb]"
您可以使用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)
);
}
上面通过wired00提供的另一个答案也是正确的,但只有如果每一行的长度完全相同(即相同数量的单词和空格)。勾选123的答案不是你问题的正确答案。
关于我在上面提到的正则表达式,请参见Straubery的答案
$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);
}
当然,您可以调整正则表达式:)
几种方法。。。你可以试着在太空中爆炸。。。然后将前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];
$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);
$a=爆炸(",$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
}
并循环通过字符串的每个字符并根据需要进行操作。