Home  >  Article  >  Backend Development  >  求求正则大神救救我

求求正则大神救救我

WBOY
WBOYOriginal
2016-06-23 14:00:51792browse

$str = "111|9|2212|1321424|5|";

$reg = "饭煲";
$reg1 = "不复";
$reg2 = "当年";

preg_match_all("/([0-9]+)\|/isU",$str,$arr);
print_r($arr);

求只匹配             1 出电饭煲海不复当年许多下挫  2 不复电线饭煲杆分别当年    3 苏当年丹公司订不复购饭煲


回复讨论(解决方案)

$str = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";$reg = "饭煲";$reg1 = "不复";$reg2 = "当年";$sp = explode('|', $str);$inArr = array();foreach ($sp as $key => $value) {	if(strpos($value,$reg) !== FALSE && strpos($value,$reg1) !== FALSE && strpos($value,$reg2) !== FALSE){		array_push($inArr, $value);	}}var_dump($inArr);

$str = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";$reg = "饭煲";$reg1 = "不复";$reg2 = "当年";$sp = explode('|', $str);$inArr = array();foreach ($sp as $key => $value) {	if(strpos($value,$reg) !== FALSE && strpos($value,$reg1) !== FALSE && strpos($value,$reg2) !== FALSE){		array_push($inArr, $value);	}}var_dump($inArr);

正则行吗?因为这个文本可能1MB 或更多,用数组效率高还是正则效率高?
这个和正则比起来哪个效率高?? 如果数组量有1W个?文本正则

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";preg_match_all('/(?<=<)([^|>]*(?:(?:饭煲|不复|当年)[^|>]*){3}[^|>]*)>/U', $s, $r);print_r($r[1]);
Array
(
    [0] => 电饭煲海不复当年许多下挫
    [1] => 不复电线饭煲杆分别当年
    [2] => 苏当年丹公司订不复购饭煲
)

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";preg_match_all('/(?<=<)([^|>]*(?:(?:饭煲|不复|当年)[^|>]*){3}[^|>]*)>/U', $s, $r);print_r($r[1]);
Array
(
    [0] => 电饭煲海不复当年许多下挫
    [1] => 不复电线饭煲杆分别当年
    [2] => 苏当年丹公司订不复购饭煲
)
徐老大这个存在缺陷 3个相同的也可以 3个不复也可以

形式语言尤其自己的规则

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";$a = explode('|', $s);$d = array("饭煲", "不复", "当年");foreach($d as $c) $a = preg_grep("/$c/", $a);print_r($a);
Array
(
    [1] => 9
    [3] => 1321424
    [4] => 5
)

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";preg_match_all('/(?<=<)([^|>]*(?:(?:饭煲|不复|当年)[^|>]*){3}[^|>]*)>/U', $s, $r);print_r($r[1]);
Array
(
    [0] => 电饭煲海不复当年许多下挫
    [1] => 不复电线饭煲杆分别当年
    [2] => 苏当年丹公司订不复购饭煲
)
老大 你这正则符合需求,,,可是我现在同时想把前面的数字取出来,因为这是数据ID....

形式语言尤其自己的规则

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";$a = explode('|', $s);$d = array("饭煲", "不复", "当年");foreach($d as $c) $a = preg_grep("/$c/", $a);print_r($a);
Array
(
    [1] => 9
    [3] => 1321424
    [4] => 5
)
$s = "111|9|2212|1321|424|5";

形式语言尤其自己的规则

$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";$a = explode('|', $s);$d = array("饭煲", "不复", "当年");foreach($d as $c) $a = preg_grep("/$c/", $a);print_r($a);
Array
(
    [1] => 9
    [3] => 1321424
    [4] => 5
)
老大你的正则太高端了,乱摸了半天总算自己摸出来了 
可是下次还是不会 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn