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

检测字符串中括号内的价格(PHP),php,regex,string,Php,Regex,String,我希望在PHP中分析字符串。它们看起来是这样的: 高级升级(10.00欧元) 我想检测字符串何时包含“(€10.00)”,但是价格会发生变化。因此,我猜测“方括号,浮点数,方括号”的正则表达式最终结果是我想从字符串中删除价格,但是,方括号中可能会出现其他内容,例如 高级升级(每人) 因此,我不能在第一个开始的括号中分解或子串。但是,可以有两个或更多的括号,例如 高级升级(每人)(10.00欧元) 因此,在本例中,我需要输出: 高级升级(每人) 因此,我的高级流程是: 检查管柱,它是否接触支架和

我希望在PHP中分析字符串。它们看起来是这样的:

高级升级(10.00欧元)

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

高级升级(每人)

因此,我不能在第一个开始的括号中分解或子串。但是,可以有两个或更多的括号,例如

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

您正在寻找这样的正则表达式:
\((.\d+\.\d+\)应与括号内的货币和价格匹配

要删除
中括号内的价格(
+
货币符号
+
+
浮动或整数编号)
),您可以使用

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

详细信息

  • \s*
    -0+空格
  • \(
    -a
  • \p{Sc}
    -任何货币字符
  • \d
    -一个数字
  • [。\d]*
    -0+字符,它们要么是
    要么是数字
  • \)
    -a
请参阅PHP演示:

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

Soooo…你已经调查过regexen了吗?因为那会让事情变得很琐碎。试试。有什么反馈吗?请检查下面的答案。这似乎有效。谢谢Wiktor,我非常感谢花时间解释每一行。