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

时间:2011-11-03 13:19:40

标签: php regex preg-match-all

我有一个数组

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

第二个正常变量: ķ 我合并

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

$ collarr 结果

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()"

感谢。

2 个答案:

答案 0 :(得分:2)

查看函数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()
)

答案 1 :(得分:0)

可以使用包含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 /零值,然后使用空格作为粘合剂将剩余元素组合成一个将被剥离的字符串它的所有管道字符。

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

如果您的实际案例具有更多不同的价值且我的答案不能满足您项目的复杂性,请使用一些导致问题的示例输入更新您的问题,并且我会调整我的方法。< / p>