我一直在尝试获取包含大约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
,但我似乎无法做到。
890382
或Code
等每个字段在字符串中都是唯一的。最好的(如果可能的话)是读取值并将它们存储在具有以字段命名的位置的数组中。如果有人可以帮助我,我将不胜感激。
顺便说一句:这个文件托管在一个我只能阅读的不同服务器中,所以我无法将其更改成更像CSV的东西。
代码我试图使用:
Key
答案 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!