我想从字符串中提取数据

时间:2018-10-30 10:41:47

标签: php

我有一个像下面这样的字符串。我希望能够提取数据并将其放入变量中。我本该使用专注于特定格式字符串的函数,但是如果字符串稍有不同,它将产生问题。

brown

`

4 个答案:

答案 0 :(得分:3)

您可以使用新行然后用:两次爆炸(),也可以使用preg_match_all简单地进行正则表达式

$str ="Surname : Lorem Creme
       Name : Doe 
       Bank name :P.O.S
       Account no:50345343
       EC no:0000000K
       ID no :85-000000 Q 85
       DOB : 01-06-34
       Employer name:min of education
       Employeer Number: Borera pry 066 Mutawatawa
       Client Physical Address: 45 New Lipore";


preg_match_all("#^\s*(.*?):\s*(.*?)\s*$#mx", $str, $matches);

var_dump(array_combine($matches[1], $matches[2]));

输出:

array(10) {
  ["Surname "]=>
  string(11) "Lorem Creme"
  ["Name "]=>
  string(3) "Doe"
  ["Bank name "]=>
  string(5) "P.O.S"
  ["Account no"]=>
  string(8) "50345343"
  ["EC no"]=>
  string(8) "0000000K"
  ["ID no "]=>
  string(14) "85-000000 Q 85"
  ["DOB "]=>
  string(8) "01-06-34"
  ["Employer name"]=>
  string(16) "min of education"
  ["Employeer Number"]=>
  string(25) "Borera pry 066 Mutawatawa"
  ["Client Physical Address"]=>
  string(13) "45 New Lipore"
}

神奇之处在于正则表达式#^\s*(.*?):\s*(.*?)\s*$#mx,您可以找到解释here

array_combine()从2组中获取值,并将它们组合在一起以获得一个数组。 preg_match_all将正则表达式应用于给定的字符串,并以  $matches数组

答案 1 :(得分:1)

最简单的方法是进行两个explode调用:

<?php
$str ="Surname : Lorem Creme
       Name : Doe 
       Bank name :P.O.S
       Account no:50345343
       EC no:0000000K
       ID no :85-000000 Q 85
       DOB : 01-06-34
       Employer name:min of education
       Employeer Number: Borera pry 066 Mutawatawa
       Client Physical Address: 45 New Lipore";


//Split string into separate lines
$lines = explode(PHP_EOL, $str);

$result = array();
foreach($lines as $ln){
    //Use explode to get the pieces left and right of the ':'
    list($key, $val) = explode(':', $ln);

    //Put that in a new array; use trim to get rid of 'presumably' unwanted whitespace
    $result[trim($key)] = trim($val);
}

var_dump($result);


?>

您也可以使用正则表达式在一行中执行此操作,但这可能更易于理解。

答案 2 :(得分:0)

使用php equals函数:

http://php.net/manual/en/function.explode.php

首先用新行爆炸以获取行(在此处检查PHP_EOL常量:http://php.net/manual/en/reserved.constants.php)并遍历它们。

然后使用另一个hashCode调用以“:”符号爆炸以获取字段名称和字段值。

使用explode()函数删除空格字符(如果它们困扰您的话)。

explode()

应该是这样的(我没有测试代码)。

答案 3 :(得分:0)

根据分隔符的不同,可以使用explode()

在这种情况下,看起来您的分隔符为“ \ r \ n”。爆炸看起来像这样:

$result = explode("\r\n", $str);

然后,您也可以在“:”上爆炸,以获取键值结果