Как разобрать файл в PHP - PullRequest
       8

Как разобрать файл в PHP

1 голос
/ 26 декабря 2010

У меня есть строка со следующим содержанием

 [text1] some content [text2] some
 content some content [text3] some
 content

"[textn]" конечны и также имеют конкретные имена.Я хочу получить содержимое в массив.Есть идеи?

Ответы [ 4 ]

3 голосов
/ 26 декабря 2010

Если вы не хотите использовать регулярные выражения, тогда strtok () поможет вам:

strtok($txt, "[");      // search for first [

while ($id = strtok("]")) {   // alternate ] and [
    $result[$id] = strtok("[");   // add token
}
1 голос
/ 26 декабря 2010

В php есть функция для разделения строки с помощью разделителей регулярных выражений, например preg_match, preg_match_all, ищите их.

Если у вас есть список слов, вы можете разбить строку следующим образом (очевидно, можно было бы написать ее намного лучше):

$words = array('[text1]','[text2]','[text3]');
$str = "[text1] some content [text2] some content some content [text3] some content3";

for ($i=0; $i<sizeof($words) ; $i++) { 
  $olddel = $del;
  $del = $words[$i];
  list($match,$str) = explode($del,$str);
  if ($i-1 >= 0) {  $matches[$i-1] = $olddel.' '.$match; }
}
$matches[] =$del." ".$str;

print_r($matches);

Будет выведено: Array ( [0] => [text1] some content [1] => [text2] some content some content [2] => [text3] some content3 )

1 голос
/ 26 декабря 2010

preg_match или preg_match_all, вам нужно дать нам пример, если вы хотите регулярное выражение.

$string = "[text1] some content [text2] some content some content [text3] some content";

preg_match_all("#\[([^\[\]]+)\]#is", $string, $matches);

print_r($matches); //Array ( [0] => Array ( [0] => [text1] [1] => [text2] [2] => [text3] ) [1] => Array ( [0] => text1 [1] => text2 [2] => text3 ) ) 

не рекурсивный.

0 голосов
/ 26 декабря 2010

Является ли [и] частью строки или вы просто использовали их, чтобы выделить часть, которую вы хотите извлечь?Если это не так, то вы можете использовать

if (preg_match_all("/\b(text1|text2|text3|foo|bar)\b/i", $string, $matches)) {
   print_r($matches);
}
...