从字符串中提取特定数据

时间:2014-07-10 09:18:54

标签: php string extract substr

我有一个带有描述的长字符串。我想从字符串中提取一些信息。但我无法弄明白该怎么做。

这是字符串:

  

Continental CONTIPREMIUMCONTACT 2 auto / zomerband - 195/55 R15 V85。   Eigenschappen EU bandenlabel:brandstofefficiÃ:ntie:F,grip op nat   wegdek:C,geluid:71dB,klasse:C1,geluidsklasse:2 - bij   www.tirendo.nl。 Nu geen verzendkosten! Directe瞄准bij u thuis   bij een montagepunt naar keuze binnen 1-4 dagen。

我想检索以下结果:

  

brandstofefficientie = F,grip op natwegdek = C,geluid = 71dB。

我试图使用爆炸提取它,但实际上并没有按照应有的方式工作。

有人可以看一下并帮助我吗?

4 个答案:

答案 0 :(得分:1)

我建议您创建一个以您的信息字符串为键的数组,然后执行regexp以获得结果。像这样:

$string = "Continental CONTIPREMIUMCONTACT 2 auto/zomerband - 195/55 R15 V85. Eigenschappen EU bandenlabel: brandstofefficientie: F, grip op nat wegdek: C, geluid: 71dB, klasse: C1, geluidsklasse: 2 - bij www.tirendo.nl. Nu geen verzendkosten! Directe levering bij u thuis of bij een montagepunt naar keuze binnen 1-4 dagen.";

$myInfo = array(
    "brandstofefficientie",
    "grip op nat wegdek",
    "geluid"
);

$pattern = "/(" . implode("|", $myInfo) . ")\:\s+(.*?),/";

preg_match_all($pattern, $string, $match);

var_dump($match);

您可以对允许的标记使用一些变体,只是为了根据您的需要以不同的方式排序结果,例如:

preg_match_all($pattern, $string, $match, PREG_SET_ORDER); //see PREG_SET_ORDER

来源: http://it2.php.net/manual/en/function.preg-match-all.php


另一种选择可能是使用named capturing group,因为:

$pattern = "/(?<info>" . implode("|", $myInfo) . ")\:\s+(?<value>.*?),/";

preg_match_all($pattern, $string, $match, PREG_SET_ORDER);

foreach($match AS $result)
{
    echo "{$result['info']} : {$result['value']}<br>";
}

答案 1 :(得分:0)

如果字符串的格式完全相同,则可以执行以下操作:

preg_match('#(.*)brandstofefficientie: (.), grip op nat wegdek: (.), geluid: (.+)dB(.*)#ui', $inputString, $matches);
echo 'brandstofefficientie: '.$matches[2].'; grip op nat wegdek: '.$matches[3].'; geluid: '.$matches[4].'dB';

我的第一个(也未接受)答案是

$result = preg_replace('#(.*)brandstofefficientie: (.), grip op nat wegdek: (.), geluid: (.+)dB(.*)#ui', 'brandstofefficientie = $2, grip op natwegdek = $3, geluid = $4dB.', $inputString);
echo $result;

将按字面意思返回结果。

答案 2 :(得分:0)

       $text='Continental CONTIPREMIUMCONTACT 2 auto/zomerband - 195/55 R15 V85. Eigenschappen EU bandenlabel: brandstofefficiëntie: F, grip op nat wegdek: C, geluid: 71dB, klasse: C1, geluidsklasse: 2 - bij www.tirendo.nl. Nu geen verzendkosten! Directe levering bij u thuis of bij een montagepunt naar keuze binnen 1-4 dagen.=';
       $explode=explode(':',$text);
       $explode_last=explode(',',$explode[4]);
       echo $string=$explode[1]."=".$explode[2]."=".$explode[3]."=".$explode_last[0];

答案 3 :(得分:0)

您可以使用以下regex preg_match方法来检索所需的字符串值。

$text = 'Continental CONTIPREMIUMCONTACT 2 auto/zomerband - 195/55 R15 V85. Eigenschappen EU bandenlabel: brandstofefficiëntie: F, grip op nat wegdek: C, geluid: 71dB, klasse: C1, geluidsklasse: 2 - bij www.tirendo.nl. Nu geen verzendkosten! Directe levering bij u thuis of bij een montagepunt naar keuze binnen 1-4 dagen.';

preg_match('/^.*?brandstofefficiëntie: (.*?),.*?grip op nat wegdek: (.*?),*.?geluid: (.*?),/',$text,$result);

现在,您可以分别在$result[1]$result[2]$result[3]找到brandstofefficiÃñtie,grip op nat wegdek和geluid的值。