php字符串进程

php字符串进程,php,string,Php,String,我有一个文本文件,其中每一行都是一个条目。 每一行都有一些用空格隔开的单词,条目末尾有2-3个带括号的单词 例如 如何在php中获得以下结果 $data[0]="asd asdasd asdasd" $data[1]= "{m}" $data[2]= "[jsbbsdfb]" $a=分解(“,$string); $a[1]//将存储字符串的第一个字 $a[2]//依此类推,直到字符串结束 好的!上面我搞错了。您可能想尝试以下方法: $str = "asd asdasd asdasd {m}

我有一个文本文件,其中每一行都是一个条目。 每一行都有一些用空格隔开的单词,条目末尾有2-3个带括号的单词

例如

如何在php中获得以下结果

$data[0]="asd asdasd asdasd"

$data[1]= "{m}"

$data[2]= "[jsbbsdfb]"
$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
}
$str=“asd asdasd asdasd{m}[jsbbsdfb]”;
$k=strlen($str);

对于($i=0;$i几种方法…您可以尝试在空格上分解…然后将前3个数组元素连接在一起

大概是这样的:

$yourString = "asd asdasd asdasd {m} [jsbbsdfb]";
$elements = explode ( " " , $yourString);

$string1 = $elements[0] . $elements[1] . $elements[2];
$string2 = $elements[3];
$string3 = $elements[4];
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)
  );
}
显然,如果需要的话,可以将值设置到数组的前3个元素中

即:


当然,您可以调整正则表达式:)

您可以使用
子字符串和
strop来查找正确的部分,或者您可以使用
preg\u match
(正则表达式),两者都有各自的优点。使用
preg_match
您只需一行就可以做到这一点,但速度相对较慢,使用起来也不那么容易。我会这样做:

$yourString = "asd asdasd asdasd {m} [jsbbsdfb]";
$elements = explode ( " " , $yourString);

$string1 = $elements[0] . $elements[1] . $elements[2];
$string2 = $elements[3];
$string3 = $elements[4];
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提供的另一个答案也是正确的,但是只有在每一行的长度完全相同(即单词和空格的数量相同)的情况下才是正确的。check123的答案不是您问题的正确答案


有关我在上面提到的正则表达式,请参见Straubery的答案。

您尝试了什么?这里有几种分割字符串的方法,包括split、reg表达式等。向我们展示您的尝试,我们可以为您提供更多帮助。这将把他的字符串分割为5个部分。。他最好先做,然后再做[对于后半部分。这不是这个@check123的正确答案,但是他的括号和单词之间似乎没有空格,所以explode可能会有帮助。查看他的示例输出并思考您的答案将产生的输出。它们匹配吗?我想不匹配。@coding Freak:好的!得到了区别!
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)
  );
}
$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);