【问题标题】:Detect a Price In Brackets in a String (PHP)检测字符串中括号中的价格 (PHP)
【发布时间】:2018-05-01 00:04:53
【问题描述】:

我正在寻找分析 PHP 中的字符串。它们显示为:

高级升级(10.00 欧元)

我想检测字符串何时包含“(€10.00)”,但是价格会发生变化。因此我猜测'Bracket,Float,Bracket'的正则表达式最终结果是我想从字符串中删除价格,但是,括号中可能会出现其他内容,例如

高级升级(每人)

因此我不能只在第一个左括号上分解或子串。但是,可能有两个或多个括号,例如

高级升级(每人)(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; 

【问题讨论】:

标签: php regex string


【解决方案1】:

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

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

regex demo

详情

  • \s* - 0+ 个空格
  • \( - 一个(
  • \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)

【讨论】:

  • 这似乎有效。谢谢 Wiktor,我非常感谢您花时间解释每一行。
【解决方案2】:

您正在寻找一个正则表达式,例如:!\((.\d+\.\d+\))!,它应该与括号内的货币和价格相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多