从一个中检索两个字符串

时间:2015-03-08 14:39:20

标签: php

我需要从一个字符串中获取两个字符串。

$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.';

我怎样才能最好地实现这一目标?

4 个答案:

答案 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);

使用过的表达式的说明:

  • 从开始到第1 :
  • 跳过所有内容
  • 提取由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));