获取字符串的子字符串

时间:2015-04-28 11:16:35

标签: php string substring substr strpos

我一直在尝试获取包含大约40行文本的字符串的子字符串。

字符串是这样的,但有aprox。另外30行:

myproject/assets/favicon.ico

我需要获取Username: example Password: pswd Code: 890382 Key: 9082 type: 1 Website: https://example.com/example Email: example@example.com 的值Code,但我似乎无法做到。

890382Code等每个字段在字符串中都是唯一的。最好的(如果可能的话)是读取值并将它们存储在具有以字段命名的位置的数组中。如果有人可以帮助我,我将不胜感激。

顺便说一句:这个文件托管在一个我只能阅读的不同服务器中,所以我无法将其更改成更像CSV的东西。

代码我试图使用:

Key

7 个答案:

答案 0 :(得分:1)

拆分每一行,然后拆分冒号。并将键/对放入数组:

$string = "..."; // your string
$lines = explode("\n",str_replace("\r","\n",$string)); // all forms of new lines
foreach ($lines as $line) {
    $pieces = explode(":", $line, 2); // allows the extra colon URLs
    if (count($pieces) == 2) { // skip empty and malformed lines
        $values[trim($pieces[0])] = trim($pieces[1]); // puts keys and values in array
    }
}

现在,您可以访问$values['Code']

来获取价值

答案 1 :(得分:1)

这应该适合你:

这里我首先用新行字符explode()表示你的字符串。在此之后,我使用array_map()浏览每个元素,然后我再次通过:将其展开。然后,我只是array_combine()第一列和第二列,我得到了array_column()

<?php

    $str = "Username: example
            Password: pswd
            Code: 890382
            Key: 9082
            type: 1
            Website: https://example.com/example
            Email: example@example.com";

    $arr = array_map(function($v){
        return array_map("trim", explode(":", $v, 2));
    }, explode(PHP_EOL, $str));

    $arr = array_combine(array_column($arr, 0), array_column($arr, 1));

    print_r($arr);

?>

输出:

Array
(
    [Username] => example
    [Password] => pswd
    [Code] => 890382
    [Key] => 9082
    [type] => 1
    [Website] => https://example.com/example
    [Email] => example@example.com
)

答案 2 :(得分:0)

取用户名的结束位置:然后找到密码的起始位置。然后使用这些值来提取用户名值。像这样找到你想要的价值......

答案 3 :(得分:0)

假设您的字符串由换行符分隔,您可以尝试:

$str = "Username: example

        Password: pswd

        Code: 890382

        Key: 9082

       type: 1

       Website: https://example.com/example

       Email: example@example.com";

$explode = explode("<br/>", $str);
foreach ($explode as $string) {
     $nextExplode = explode(":", $str);
         foreach($nextExplode as $nextString) {
             if ($nextString[0] == 'Code']) {
                 echo $nextString[1];
             }
          }
     }

答案 4 :(得分:0)

尝试执行拆分定界符&#34; \ n&#34;和/或&#39;:&#39;然后,它将为您提供一个数组,您可以在其中进一步剖析关键值对。

在下面的示例中,我采用了从文件中读取的方法,并按&#34;:\ s&#34;给了一条线。

<强>即。使用&#39; data.txt&#39;

的示例
<?php

$results = array();

$file_handle = fopen("data.txt", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   $line_array = preg_split("/:\s/", $line);

   // validations ommited 
   $key = $line_array[0];
   $value = $line_array[1];

   // ie. $result['Code'] => '890382' 
   $result[$key] = $value;
}
fclose($file_handle);

print_r($result);

?>

输出用法ie.echo $ result [&#39;用户名&#39;]:

Array
(
    [Username] => example

    [Password] => pswd

    [Code] => 890382

    [Key] => 9082

    [type] => 1

    [Website] => https://example.com/example

    [Email] => example@example.com
)

答案 5 :(得分:0)

你可以尝试

preg_match('/Code: ([0-9]+)/', $subject, $matches);

你应该在$ matches数组中有代码。

您应该调整正则表达式以使其适合您的情况。我举一个例子。

答案 6 :(得分:0)

在您的特殊情况下,请使用以下代码:

preg_match('/Code\:\s*(.*)\s*/m', $yourstring, $match); 
$match[1] //contains your code!