检测字符串中的括号中的价格(PHP)

时间:2017-11-17 09:04:43

标签: php regex string

我正在寻找PHP中的字符串分析。他们看起来像这样:

高级升级(€10.00)

我想检测字符串何时包含'(€10.00)',但价格会发生变化。因此我猜测'支架,浮子,支架'的RegEx最终结果是我想从字符串中删除价格,但是,它可能出现在括号中的其他东西,例如。

高级升级(每人)

因此我不能只在第一个开口括号上爆炸或子串。但是,可能有两个或更多个括号,例如

高级升级(每人)(10.00欧元)

因此,在这种情况下,我需要输出:

高级升级(每人)

因此,我的高级别流程将是:

  • 检查字符串,它是否与支架接触并浮动?
  • 是的,取下支架并浮动,留下其他支架,继续。
  • 没有托架和浮动?保持原样,继续。

我的pysedo代码是:

//Get my string
$str = $meta->display_key;

//I need a RegEx here to detect my bracket and float e.g. (€X.YY)
if (strpos($str, '(') !== false) {
    //Need to remove brackets and float here, but leave all other brackets in place.
    $formatted_string  = substr($str, 0, strrpos($str, '('));
}

//Do nothing, the string doesn't match my criteria
else $display_key_formatted = $str; 

2 个答案:

答案 0 :(得分:1)

要删除( + CURRENCY_SYMBOL + FLOAT_OR_INT_NUMBER + )中括号内的价格,您可以使用

$res = preg_replace('~\s*\(\p{Sc}\d[.\d]*\)~u', '', $s);

请参阅regex demo

<强>详情

  • \s* - 0+ whitespaces
  • \( - (
  • \p{Sc} - 任何货币字符
  • \d - 数字
  • [.\d]* - 0 +字符.或数字
  • \) - )

参见PHP演示:

$re = '/\s*\(\p{Sc}\d[.\d]*\)/u';
$str = ' TEXT (text) (€10.00)';
$res = preg_replace($re, '', $str);
echo $res; // =>  TEXT (text)

答案 1 :(得分:0)

你正在寻找像!\((.\d+\.\d+\))!这样的正则表达式,它应该与货币和括号内的价格匹配。