我需要从一个字符串中获取两个字符串。
$string = "Service rating : good<br/>Product : good";
应该返回:
$service = 'good';
$product = 'good';
和
$string = "Service rating : Excellent service!<br/>Product : Outstanding product - this is the second scarf I've ordered.";
应该返回:
$service = 'Excellent service!';
$product = 'Outstanding product - this is the second scarf I've ordered.';
我怎样才能最好地实现这一目标?
答案 0 :(得分:1)
您可以使用explode
功能将字符串分开2次。首先 - 使用中间的标记<br/>
将服务与产品分开。
第二次使用将获得相应的状态 - 使用字符串&#34; :&#34;
这是代码
<?php
$input = "Service rating : good<br/>Product : good";
list($service, $product) = explode('<br/>', $input);
$service = explode(' : ', $service);
$product = explode(' : ', $product);
echo $service[1];
echo "<br>";
echo $product[1];
?>
答案 1 :(得分:0)
$a = explode("<br/>", $string);
将为您提供一个包含两个值的数组:您要求的字符串。
然后:
echo $a[0];
echo $a[1];
将打印两个字符串。
或使用list
将这些值分配给您请求的变量:
list($service, $product) = explode("<br/>", $string);
然后,正如bladerz建议的那样,用' : '
重复爆炸以获得服务和产品的评级。
答案 2 :(得分:0)
您可以为解决方案使用正则表达式。我举个例子:
$string = "Service rating : good<br/>Product : good";
$re = '/^.*\:\s*(?:(?<service>[\w\s]+)\<br\/>).*\:\s*(?<product>[\w\s]+)$/';
if (preg_match($re, $string, $matches))
{
$service = $matches['service'];
$product = $matches['product'];
}
var_dump($service, $product);
使用过的表达式的说明:
:
service
<br/>
匹配
:
product
匹配(直到字符串结尾)您可以在此处使用它:https://regex101.com/r/vH4aZ9/2
答案 3 :(得分:0)
使用preg_match_all()只是另一种选择:
基本上:
([a-zA-Z\s]+) : ([a-zA-Z\s-\']+)
在方括号内搜索一组带有允许字符的单词,并在它们之间加一个分号。然后,您可以应用逻辑来处理生成的数组。
$string1 = "Service rating : good<br/>Product : good";
$string2 = "Service rating : Excellent service!<br/>Product : Outstanding product - this is the second scarf I've ordered.";
function getRate($string) {
preg_match_all('#([a-zA-Z\s]+?) : ([a-zA-Z\s-\']+)#', $string, $matches, PREG_SET_ORDER);
return $matches ?: false;
}
var_dump(getRate($string1));
var_dump(getRate($string2));