php字符串进程



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

例如。

asd asdasd asdasd {m} [jsbbsdfb] 

如何在php中获得以下结果

$data[0]="asd asdasd asdasd"
$data[1]= "{m}"
$data[2]= "[jsbbsdfb]"

您可以使用substringstrpos来找到正确的部分,也可以使用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
}

并循环通过字符串的每个字符并根据需要进行操作。

最新更新