процесс строки php - PullRequest
1 голос
/ 04 июня 2011

У меня есть текстовый файл, в котором каждая строка является записью.каждая строка содержит определенные слова, разделенные пробелом, и 2 -3 слова в конце записи в скобках

например.

asd asdasd asdasd {m} [jsbbsdfb] 

как мне получить следующий результат в php

$data[0]="asd asdasd asdasd"

$data[1]= "{m}"

$data[2]= "[jsbbsdfb]"

Ответы [ 5 ]

1 голос
/ 04 июня 2011

Вы можете использовать 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, тоже правильный, но только , если длина каждой строки одинакова (т.е. одинаковаколичество слов через пробел).Ответ по check123 не является правильным ответом на ваш вопрос.

См. ответ Strauberry для регулярного выражения, которое я упоминал выше.

1 голос
/ 04 июня 2011
$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);
}

Вы можете настроить регулярное выражение:)

0 голосов
/ 04 июня 2011
$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);
0 голосов
/ 04 июня 2011

несколько способов ... вы можете попробовать взорвать на пробелах ... затем объединить первые 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];
0 голосов
/ 04 июня 2011

$ 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
}

и перебрать все символы строки и работать как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...