Как извлечь данные (строки) с помощью PHP? - PullRequest
4 голосов
/ 05 октября 2011

Я новичок в php и понятия не имею, как извлечь именно то, что я хочу, в строку. например:

Instant Oats Drink - Chocolate Flavour 165g (33g x 5)

Я хочу извлечь эти данные так, чтобы

Name: Instant Oats Drink - Chocolate Flavour
Weight: 165g
number of pack: 5
unit weight: 33g

Пожалуйста, помогите мне с этим вопросом.

Ответы [ 4 ]

1 голос
/ 05 октября 2011

Если все ваши строки имеют одинаковую форму, вы можете использовать регулярные выражения.

учтите, что:

<?php

    $str = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";

    preg_match('/(?P<title>[a-zA-Z\s\-]*)(?P<grammars>[0-9]*g)(\s+\()(?P<portion>[0-9]+g)(\s+x\s+)(?P<times>[0-9]+)(\))/', $str, $m);

    echo "Title : " . $m['title'] . '<br />';
    echo "Grammars : " . $m['grammars'] . '<br />';
    echo "Portion : " . $m['portion'] . '<br />';
    echo "Times : " . $m['times'] . '<br />';

?>

На основе ответа @Troy вы можете даже использовать тот, который дажесортен

<?php

    $str = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";

    preg_match('/(?P<title>.*) (?P<grammars>\d+g) \((?P<portion>\d+g) x (?P<times>\d+)\)/', $str, $m);

    echo "Title : " . $m['title'] . '<br />';
    echo "Grammars : " . $m['grammars'] . '<br />';
    echo "Portion : " . $m['portion'] . '<br />';
    echo "Times : " . $m['times'] . '<br />';

?>
0 голосов
/ 05 октября 2011

Я не уверен, насколько конкретно вы ищете ответ, но вот регулярное выражение, которое "анализирует" вашу строку.Это будет работать для любой строки, которая следует за тем же шаблоном.

<?php
$s = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";

preg_match("/(.*) (\d+g) \((\d+g) x (\d+)\)/", $s, $matches);
var_dump($matches);
?>

Выходы:

array(5) {
  [0]=>
  string(53) "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)"
  [1]=>
  string(38) "Instant Oats Drink - Chocolate Flavour"
  [2]=>
  string(4) "165g"
  [3]=>
  string(3) "33g"
  [4]=>
  string(1) "5"
}
0 голосов
/ 05 октября 2011

Если строки различаются настолько, насколько вы предполагаете, то это будет практически невозможно сделать точно.И это на любом языке;ничто в PHP не сделает это проще или сложнее: это проблема синтаксического анализа на естественном языке, и это действительно сложно автоматизировать.

Regex (с использованием функции preg_split()) может выполнить эту работу, если строки являются регулярными, но не для произвольно сформулированных строк, подобных этим.Каждый из них имеет свой особый случай, поэтому вам нужно было бы написать отдельный бит кода для каждого ... но в этом случае вы могли бы также выполнить расщепление вручную.

ЕдинственноеВы получите данные такого типа без ручного вмешательства, если поставщик данных (то есть сайт, на который вы ссылались в комментариях?) может предоставить их в предварительно отформатированном виде.Возможно, они уже разбили данные на требуемый формат в своей базе данных продуктов, поэтому, если они захотят предоставить их, это сработает для вас.

Они почти наверняка захотят взять с вас плату заданные, но учитывая количество усилий, затрачиваемых на самостоятельное выполнение вручную, это, вероятно, стоило бы.

0 голосов
/ 05 октября 2011

Чтобы извлечь данные из строк в php, вы можете использовать такие функции, как preg_match, взорваться, ereg

Вам нужно быть более точным относительно точного формата всех строк, чтобы это работало правильно, потому что вам нужно иметь определенный формат данных, который вы ищете с помощью функций.

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