Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用regex或preg_match提取字符串的精确部分作为变量?_Php - Fatal编程技术网

如何在PHP中使用regex或preg_match提取字符串的精确部分作为变量?

如何在PHP中使用regex或preg_match提取字符串的精确部分作为变量?,php,Php,$dataItem->calculation来自数据库 我试图将值(23503000109028604000)提取为单独的变量(这些值可以更改,因此我希望匹配任何内容,例如 中间 if([item-237_已检查]){( 及 “”} ). 进行了一系列测试,但没有成功: echo(addslashes($dataItem->calculation)); Returns: "if(([item-237_isChecked])){(2350)} if(([item-238_isChecked

$dataItem->calculation
来自数据库

我试图将值
(23503000109028604000)
提取为单独的变量(这些值可以更改,因此我希望匹配任何内容,例如

中间

if([item-237_已检查]){(

“”}
).

进行了一系列测试,但没有成功:

echo(addslashes($dataItem->calculation));
Returns:
"if(([item-237_isChecked])){(2350)} 
if(([item-238_isChecked])){(3000)}
if(([item-236_isChecked])&&([item-242_isChecked])){(1090)}
if(([item-236_isChecked])&&([item-243_isChecked])){(2860)} 
if(([item-239_isChecked])){(4000)}"
更新: 我通过使用
explode()
简化输入,解决了这个问题:


隔离目标数字字符串似乎不需要匹配右侧
)}
,因此我在模式中省略了该部分。我正在匹配
{(
),然后用
\K
重新启动完整字符串匹配,然后匹配连续数字

在检查
preg\u match\u all()
是否精确地进行了5次匹配后,我分配了5次完整字符串匹配(
[0]
是完整字符串匹配子数组),并使用现代数组解构技术将它们分配给变量——这可以用不太现代的
list()
调用代替

代码:()

输出:

$data = 'if(([item-237_isChecked])){(2350)} 
if(([item-238_isChecked])){(3000)}
if(([item-236_isChecked])&&([item-242_isChecked])){(1090)}
if(([item-236_isChecked])&&([item-243_isChecked])){(2860)} 
if(([item-239_isChecked])){(4000)};';

[$singlelongprice1, $singlewidelongprice1, $doublelongprice1, $triplelongprice1, $quadlongprice1] = preg_match_all('~{\(\K\d+~', $data, $matches) == 5 ? $matches[0] : ['','','','',''];

echo '$singlelongprice1 = ' , $singlelongprice1 , "\n";
echo '$singlewidelongprice1 = ' , $singlewidelongprice1 , "\n";
echo '$doublelongprice1 = ' , $doublelongprice1 , "\n";
echo '$triplelongprice1 = ' , $triplelongprice1 , "\n";
echo '$quadlongprice1 = ' , $quadlongprice1;

p、 我将
quod
改为
quad
。每当你需要开发正则表达式模式时,就这样运行你的测试:

看起来隔离目标数字字符串不需要匹配右侧
)}
,所以我从我的模式中省略了这一部分。我正在匹配
{(
),然后用
\K
重新启动完整字符串匹配,然后匹配连续数字

在检查
preg\u match\u all()
是否精确地进行了5次匹配后,我分配了5次完整字符串匹配(
[0]
是完整字符串匹配子数组),并使用现代数组解构技术将它们分配给变量——这可以用不太现代的
list()
调用代替

代码:()

输出:

$data = 'if(([item-237_isChecked])){(2350)} 
if(([item-238_isChecked])){(3000)}
if(([item-236_isChecked])&&([item-242_isChecked])){(1090)}
if(([item-236_isChecked])&&([item-243_isChecked])){(2860)} 
if(([item-239_isChecked])){(4000)};';

[$singlelongprice1, $singlewidelongprice1, $doublelongprice1, $triplelongprice1, $quadlongprice1] = preg_match_all('~{\(\K\d+~', $data, $matches) == 5 ? $matches[0] : ['','','','',''];

echo '$singlelongprice1 = ' , $singlelongprice1 , "\n";
echo '$singlewidelongprice1 = ' , $singlewidelongprice1 , "\n";
echo '$doublelongprice1 = ' , $doublelongprice1 , "\n";
echo '$triplelongprice1 = ' , $triplelongprice1 , "\n";
echo '$quadlongprice1 = ' , $quadlongprice1;

p、 我将
quod
改为
quad
。每当你需要开发一个正则表达式模式时,就这样运行你的测试:

谢谢这些帮助,但我仍然无法制作一个很好的正则表达式来满足我的需要,所以我简化了问题,如更新中所示。请你将你的解决方案作为一个单独的答案发布,然后再让它实现他“批准”了这个问题的答案?谢谢!谢谢这些帮助,但我仍然无法制作一个很好的正则表达式来满足我的需要,所以我简化了问题,如更新中所示。请您将您的解决方案作为单独的答案发布,然后将其作为这个问题的“批准”答案?谢谢!
$data = 'if(([item-237_isChecked])){(2350)} 
if(([item-238_isChecked])){(3000)}
if(([item-236_isChecked])&&([item-242_isChecked])){(1090)}
if(([item-236_isChecked])&&([item-243_isChecked])){(2860)} 
if(([item-239_isChecked])){(4000)};';

[$singlelongprice1, $singlewidelongprice1, $doublelongprice1, $triplelongprice1, $quadlongprice1] = preg_match_all('~{\(\K\d+~', $data, $matches) == 5 ? $matches[0] : ['','','','',''];

echo '$singlelongprice1 = ' , $singlelongprice1 , "\n";
echo '$singlewidelongprice1 = ' , $singlewidelongprice1 , "\n";
echo '$doublelongprice1 = ' , $doublelongprice1 , "\n";
echo '$triplelongprice1 = ' , $triplelongprice1 , "\n";
echo '$quadlongprice1 = ' , $quadlongprice1;
$singlelongprice1 = 2350
$singlewidelongprice1 = 3000
$doublelongprice1 = 1090
$triplelongprice1 = 2860
$quadlongprice1 = 4000