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