Php 提取两个方括号内的数字
我已经看到了这一点,这与我有关,但我还有一个附加条件要补充,我不知道如何处理这一点Php 提取两个方括号内的数字,php,regex,Php,Regex,我已经看到了这一点,这与我有关,但我还有一个附加条件要补充,我不知道如何处理这一点 \[(.*?)\] 现在这段代码将提取方括号内的所有内容,但我只希望提取数字 假设我有以下表达式[+₪7.00],我只希望提取7.00或7 如何使用正则表达式仅从方括号中提取数字 编辑: 这就是我迄今为止所尝试的: \[([^\d])\] [^\d]假设只从字符串中提取数字,但在这里不起作用 由于7.00 编辑: //Add Addons & Prices if($slug == "addo
\[(.*?)\]
现在这段代码将提取方括号内的所有内容,但我只希望提取数字
假设我有以下表达式[+₪7.00]
,我只希望提取7.00
或7
如何使用正则表达式仅从方括号中提取数字
编辑:
这就是我迄今为止所尝试的:
\[([^\d])\]
[^\d]
假设只从字符串中提取数字,但在这里不起作用
由于7.00
编辑:
//Add Addons & Prices
if($slug == "addon"){
$temp = explode(',', $value);
$group = [];
foreach($temp as $t){
echo $t;
$regex = "/\[[^][\d]*\K\d+(?:\.\d+)?(?=[^][]*])/";
$price = 0;
$str = $t;
if (preg_match_all($regex, $str, $matches)) {
foreach ($matches[0] as $match => $m) {
$price = $m;
}
}
echo $price;
echo '<br/>';
$g = [
'name' => $t,
'values' => [
[
'id' => 0,
'name' => $t,
'price' => $price
]
]
];
array_push($group, $g);
}
}
//添加附加组件和价格
如果($slug==“加载项”){
$temp=分解(“,”,$value);
$group=[];
foreach($t的临时值){
echo$t;
$regex=“/\[^][\d]*\K\d+(?:\.\d+)(?=[^][]*])/”;
$price=0;
$str=$t;
if(preg_match_all($regex,$str,$matches)){
foreach($match[0]作为$match=>$m进行匹配){
$price=$m;
}
}
回声$price;
回声“
”;
$g=[
'name'=>t美元,
“值”=>[
[
“id”=>0,
'name'=>t美元,
“价格”=>$price
]
]
];
阵列推送($group,$g);
}
}
要从方括号中提取单个数字,可以使用
\[^][\d]*\K\d+(?:\.\d+)(?=[^][]*])
看。详情:
-a\[
字符[
-除[^][\d]*
、[
和数字以外的零个或多个字符]
-匹配重置运算符,该运算符将丢弃当前整体匹配内存缓冲区中迄今为止匹配的所有文本\K
-一个或多个数字,后跟可选的\d+(?:\.\d+)
序列和一个或多个数字
-正向前瞻,需要零个或多个字符,而不是(?=[^][]*])
和[
,然后立即在当前位置右侧添加一个]
字符]
$re='/\[^][\d]*\K\d+(?:\.\d+)(?=[^][]*])/;
$str='我有下面的表达式[+₪7.00],我只希望提取7.00或7';
如果(预匹配所有($re,$str,$MATCHS)){
打印($matches[0]);
}
//=>数组([0]=>7.00)
以防有多个数字要提取…
然后,你可以使用
(?:\G(?!\A)\[)[^][\d]*\K\d+(?:\.\d+)(?=[^][]*])
看
(?:\G(?!\A)\[)
匹配上一次成功匹配的结尾或[
字符。能否显示当前正则表达式以查看问题所在?此外,还不清楚您想对[+7.00和89]执行什么操作
cases.@WiktorStribiżew不应该期望任何这样的case,只有一个数字。我还有另一个问题,我的字符串中有希伯来语,正则表达式不适用于希伯来语,这是什么原因?这是我的字符串:
-调试结果:8362
而不是7.00
@exclusive3您能检查一下吗?我没有看到任何问题。这很奇怪,当我使用foreach循环从数组中提取值时(我得到了正确的值(7.00
)。我不明白为什么会发生这种情况,知道吗?@exclusive3$re='/\[^][\d]*\K\d+(?:\.\d+)(?=[^][*])/u';
@exclusive3您可能需要使用html\u entity\u decode($str
将实体转换为文字字符。