所以我有这个大字符串,其中包含以下内容:
"(...) Status: Ativo
Identificador: F36CE5
Meio de Pagamento: Cartão de crédito
Data de contratação: 25/03/2015
Data de expiração: 25/03/2017 (...)"
* the "(...)" is just to identify that there are more content before and after this part
我的目标是在"Identificador:"
之后立即仅隔离部分,即,我需要获取值"F36CE5"
(当然每次都不同)并将其设置为变量。
我尝试了以下代码:
$initialString = "Status: Ativo
Identificador: F37CE5
Meio de Pagamento: Cartão de crédito
Data de contratação: 25/03/2015
Data de expiração: 25/03/2017";
$arr = explode(":", $initialString);
$important = $arr[2];
echo $important;
但是我得到了
F37CE5
Meio de Pagamento
我应该怎么做才能获得F37CE5
?
有没有办法告诉PHP:“在'Identificador:'之后给出正确的字符串,仅此而已”?
答案 0 :(得分:1)
首先拆分线,然后搜索带有“Identificator”的线:
$initialString = "Status: Ativo
Identificador: F37CE5
Meio de Pagamento: Cartão de crédito
Data de contratação: 25/03/2015
Data de expiração: 25/03/2017";
$lines = explode("\n", $initialString);
foreach($lines as $line) {
list($first, $second) = explode(":", $line);
if (trim($first) == 'Identificator') {
$important = $second;
break;
}
}
echo $important;
答案 1 :(得分:1)
使用正则表达式。 类似的东西:
<?php
$pattern = '/Identificador: (\w+)/';
preg_match($pattern, $initialString, $matches);
print_r($matches[1]);
?>
$ matches [1]将包含您要查找的字符串。
答案 2 :(得分:1)
一个简单的方法是使子串具有正确的开始,然后获得所需的部分:
$initialString = "Status: Ativo
Identificador: F37CE5
Meio de Pagamento: Cartão de crédito
Data de contratação: 25/03/2015
Data de expiração: 25/03/2017";
$substring = substr($initialString, strpos($initialString, "Identificador:") + 14);
$substring = substr($substring, 0, strpos($substring, "\n"));
答案 3 :(得分:0)
如果字符串的长度始终相同,则可以执行此操作
echo substr($important, 0, 6);
答案 4 :(得分:0)
所有其他答案都建议爆炸和分裂线,这通常很慢。您应该使用strpos
并循环显示结果。
在我的测试中(循环10,000次),我的代码在非常大的测试字符串上只花了0.249
秒。在相同条件下,此页面上发布的其他代码花费0.811
秒执行相同的任务。
<?php
$pos = 0;
while(($pos = strpos($input,"Identificador:",$pos)) !== false) {
$end = strpos($input,"\n",$pos);
if($end) {
$line = substr($input,$pos,$end-$pos);
$parts = explode(':',$line);
echo $parts[1]."\n";
$pos = $end;
}else{
$pos++;
}
}
?>
答案 5 :(得分:0)
您可以使用正则表达式捕获组:
preg_match("/Identificador\s*:\s*(\w+)/",$initialString,$matches);
然后将结果存储在$matches[1]
中,如果找不到匹配项,则数组为空。