使用字符串中的字符串填充变量

时间:2017-10-02 23:17:58

标签: php string preg-match

我尝试了各种PHP str_*函数,但无法找到替换,explode()等的正确组合来完成我需要的操作。

我想获取一些特定文本,这些文本将出现在字符串-ex下面:

  

服务条款ID:#928374 (Val:$ 2.50 ,Add'l费用: 10.25 %)

请注意粗体字符串。我需要从那个主字符串中抓取它们。这些粗体值当然会改变每个用户几次,这真的让我失望。非粗体文本是一致/恒定的。

有谁知道我的尝试是否可以完成?如果是这样,你能提供一些指导/见解吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

您可以考虑使用正则表达式:

$str = "Terms of Service ID: #928374 (Val: $2.50, Add'l fee: 10.25%)";
$pattern = '/Terms of Service ID: (#[0-9]+) \(Val: (\$[0-9\.]+), Add\'l fee: ([0-9\.]+%)\)/';
$matches = array();
preg_match($pattern, $str, $matches);

然后,只需访问索引1,2和3中$matches数组中捕获的值。

修改

这是一个更紧凑的正则表达式,它应该更能抵抗格式更改,并从结果中排除$%字符:

$str = 'Terms of Service ID: #928374 (Val: $2.50, Add\'l fee: 10.25%)';
$pattern = '/(#[0-9]+)[^\$]+\$([0-9\.]+)[^0-9]+([0-9\.]+)%/';
$matches = array();
preg_match($pattern, $str, $matches);

此具体示例的输出为:

$matches = array(
    "#928374 (Val: $2.50, Add'l fee: 10.25%",  //matched from the entire regular expression
    "#928374",  //first capture group
    "2.50",     //second capture group
    "10.25"     //third capture group
);

答案 1 :(得分:1)

鉴于大多数值都是静态的,您可以从字符串中替换(大多数)静态值并在空格上爆炸。然后你剩下三个值(在值上有一个逗号,你可以删除它)。

$replace = array("Terms of Service ID: #", "(Val: $", "Add'l fee: ", "%)");
$string = "Terms of Service ID: #928374 (Val: $2.50, Add'l fee: 10.25%)";

$result = str_replace($replace, "", $string);  // Replace static strings
$pieces = explode(" ", $result);               // Explode on spaces, get pieces
$pieces[1] = rtrim($pieces[1], ",");           // Trim away the trailing comma

$id = $pieces[0];
$value = $pieces[1];
$fee_percent = $pieces[2];

答案 2 :(得分:-1)

您可以使用正则表达式解决此问题。

如果你有一分钟​​的话,我会为你想要的不同东西弄清楚。

$str = 'Terms of Service ID: #928374 (Val: $2.50, Add\'l fee: 10.25%)';
$id = preg_match('/#[0-9]*/', $str, $matches)[0];
$val = preg_match(/\$[0-9]*\.[0-9]*/, $str, $matches)[0];