求求正则!!!!大神救救我。。。。

山东高速大哥 2014-03-13 07:07:43
$str = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";

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

preg_match_all("/([0-9]+)<(.*".$reg.".*".$reg1.".*)>\|/isU",$str,$arr);
print_r($arr);

求只匹配 1 出电饭煲海不复当年许多下挫 2 不复电线饭煲杆分别当年 3 苏当年丹公司订不复购饭煲
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
山东高速大哥 2014-03-14
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
形式语言尤其自己的规则
$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] => 1321<不复电线饭煲杆分别当年>424 [4] => <苏当年丹公司订不复购饭煲>5 )
老大你的正则太高端了,乱摸了半天总算自己摸出来了 可是下次还是不会
山东高速大哥 2014-03-14
  • 打赏
  • 举报
回复
引用 1 楼 microlab2009 的回复:
$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个?文本正则
山东高速大哥 2014-03-14
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
形式语言尤其自己的规则
$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] => 1321<不复电线饭煲杆分别当年>424 [4] => <苏当年丹公司订不复购饭煲>5 )
$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>|424<苏当年丹公司订不复购饭煲>|5<sis阿不复司法>";
山东高速大哥 2014-03-14
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";

preg_match_all('/(?<=<)([^|>]*(?:(?:饭煲|不复|当年)[^|>]*){3}[^|>]*)>/U', $s, $r);
print_r($r[1]);
Array ( [0] => 电饭煲海不复当年许多下挫 [1] => 不复电线饭煲杆分别当年 [2] => 苏当年丹公司订不复购饭煲 )
老大 你这正则符合需求,,,可是我现在同时想把前面的数字取出来,因为这是数据ID....
xuzuning 2014-03-14
  • 打赏
  • 举报
回复
形式语言尤其自己的规则
$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] => 1321<不复电线饭煲杆分别当年>424 [4] => <苏当年丹公司订不复购饭煲>5 )
嘻哈大咖秀 2014-03-14
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
$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个不复也可以
xuzuning 2014-03-14
  • 打赏
  • 举报
回复
$s = "111<第一饭煲>|9<电饭煲海不复当年许多下挫>|2212<德国的花>|1321<不复电线饭煲杆分别当年>424|<苏当年丹公司订不复购饭煲>5|<sis阿不复司法>";

preg_match_all('/(?<=<)([^|>]*(?:(?:饭煲|不复|当年)[^|>]*){3}[^|>]*)>/U', $s, $r);
print_r($r[1]);
Array ( [0] => 电饭煲海不复当年许多下挫 [1] => 不复电线饭煲杆分别当年 [2] => 苏当年丹公司订不复购饭煲 )
嘻哈大咖秀 2014-03-13
  • 打赏
  • 举报
回复
$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);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧