繁体   English   中英

在Php正则表达式上提取错误字符串(preg_match_all函数)

[英]Extract Error string on Php regex (preg_match_all function)

我有一个数组

$arr1[0]=SOAP-ENV:Server Market 1
$arr[1]="";
$arr[2]=0;
$arr[3]="|Error : User Name and Password is Failed"

第二个正常变量 :K i merge

$collarr = array_merged($var1,$othervar);
print_r($collarr);

$ tier 结果

Array ( 
    [0] => SOAP-ENV:Server Market 1| 
    [1] =>
    [2] => 0
    [3] => |Error : User Name and Password is Failed
    [4] => SOAP-ENV:Server Market 2| 0 |Error : Failed Mysql query()) 

我用正则表达式解析

preg_match_all("/[error]+/i",$collarr[0].$collarr[4],$resultarr);

我得到的结果是:

 Array ( [0] => Array ( [0] => Error [1] => Error ) )

什么是最好的正则表达式模式有以下结果

"Error Soap-Env:Server market 1: User Name and Password is Failed Server Market"."Error Soap-Env:Server market 2 : Failed Mysql query()"

谢谢。

看一下funciont preg_grep,它会过滤出指定模式的数组:

$resultarr = preg_grep("/error/i", $collarr);
print_r($resultarr);

给我打印:

Array
(
    [3] => |Error : User Name and Password is Failed
    [4] => SOAP-ENV:Server Market 2| 0 |Error : Failed Mysql query()
)

可以使用包含preg_match_all()preg_grep() ,但这些函数使用正则表达式,并且通常比非基于正则表达式的函数效率低。

如果你总是拥有你在样本数组中提供的相同数据结构,那么我有一个单行解决方案,它使用array_filter()implode()str_replace()为每个错误数组提供所需的字符串。

$arr1[0]="SOAP-ENV:Server Market 1";
$arr1[1]="";
$arr1[2]=0;
$arr1[3]="|Error : User Name and Password is Failed";

echo $str1=str_replace("|","",implode(' ',array_filter($arr1)));  // declare and echo

echo "<br>";

$arr2[0]="SOAP-ENV:Server Market 2";
$arr2[1]="";
$arr2[2]=0;
$arr2[3]="|Error : Failed Mysql query()";

echo $str2=str_replace("|","",implode(' ',array_filter($arr2)));  // declare and echo

这将输出:

SOAP-ENV:Server Market 1 Error : User Name and Password is Failed
SOAP-ENV:Server Market 2 Error : Failed Mysql query()

你会看到,如果你将4元素数组提供给我的3函数方法,它将首先删除空/ null /零值,然后使用空格作为粘合剂将剩余元素组合成一个字符串,该字符串将被剥离所有的管道人物。

如果要对这些数据进行任何连接/组合/合并,我建议在生成所需的字符串后执行此操作。

如果您的实际案例具有更多不同的值并且我的答案不符合您项目的复杂性,请使用一些导致问题的示例输入更新您的问题,我将调整我的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM