尝试优化我的正则表达式代码,因为它的执行时间超过一分钟
Trying to optimize my regex code as it is taking more than a minute to execute
我的代码用于解析 html ,我使用了很多条件来获得我想要的输出。我得到了我想要的,但过程太慢了。我尝试尽可能多地优化 possible.Please 帮助优化正则表达式和我的书面条件。
foreach($html->find('p') as $e){
if($e->tag=='p' && $e->class =='Ex'){
$e->setAttribute('class', 'pick Ex');
$e->setAttribute('id', 'Ex'.$i);
$e->outertext = "<div class=\"imgcontainer\" id='img-container-".$i."'><div class=\"container-div\" id='some_".$i."'><h2 class='imgtitle'>".str_replace('nbsp','',preg_replace('/[^\p{L}\-\(\)$\s {0-9} :]/u', '',$e->plaintext))."</h2>";
$n=$i;
$allImgIndexContainer.="<li><a href='#image-container-".$i."'>".str_replace('nbsp','',preg_replace('/[^\p{L}\s\(\)\-$ {0-9} :]/u', '',$e->plaintext))."</a></li>";
$i++;
$flag1 = 1;
}
if(preg_match("/<img\s[^<>]*><\/p>/i", $e))
{
if(($e->tag=='p' && $e->class=='Image') or ($e->tag=='p' && $e->class=='MsoNormal'))
{
$tomatch = $e->parentNode();
if (strpos($tomatch,'<td') == true)
{
$e->setAttribute('class', 'pickmeimg');
$e->outertext = "<div class=\"img-wapper\">".str_replace(' ', ' ', str_replace('Â','',$e->innertext))."</div>";
$flag2 = 1;
}
}
}
if(($e->tag=='p' && $e->class=='Image') or ($e->tag=='p' && $e->class=='Source') or ($e->tag=='p' && $e->class=='MsoNormal'))
{
if($flag2 ==1)
{ $btn = "<div class='download-sub-menu clearfix'><div class='dl' onclick=\"dpt('".$n."');\">Download</div></div>";
}
else
{
$btn = '';
}
$e->setAttribute('class', 'pickmeimg');
$e->outertext = "<p class='image-footer'>".str_replace(' ', ' ', str_replace('Â','',preg_replace('/#.*?(<img.+?>).*?#is', '',$e->plaintext)))."</p></div>".$btn."</div>";
$flag3 = 1;
$flag2 = 0;
}
}
我已经将大部分功能从 php 更改为 jquery,现在这个过程非常快,正如我想要的那样。
我的代码用于解析 html ,我使用了很多条件来获得我想要的输出。我得到了我想要的,但过程太慢了。我尝试尽可能多地优化 possible.Please 帮助优化正则表达式和我的书面条件。
foreach($html->find('p') as $e){
if($e->tag=='p' && $e->class =='Ex'){
$e->setAttribute('class', 'pick Ex');
$e->setAttribute('id', 'Ex'.$i);
$e->outertext = "<div class=\"imgcontainer\" id='img-container-".$i."'><div class=\"container-div\" id='some_".$i."'><h2 class='imgtitle'>".str_replace('nbsp','',preg_replace('/[^\p{L}\-\(\)$\s {0-9} :]/u', '',$e->plaintext))."</h2>";
$n=$i;
$allImgIndexContainer.="<li><a href='#image-container-".$i."'>".str_replace('nbsp','',preg_replace('/[^\p{L}\s\(\)\-$ {0-9} :]/u', '',$e->plaintext))."</a></li>";
$i++;
$flag1 = 1;
}
if(preg_match("/<img\s[^<>]*><\/p>/i", $e))
{
if(($e->tag=='p' && $e->class=='Image') or ($e->tag=='p' && $e->class=='MsoNormal'))
{
$tomatch = $e->parentNode();
if (strpos($tomatch,'<td') == true)
{
$e->setAttribute('class', 'pickmeimg');
$e->outertext = "<div class=\"img-wapper\">".str_replace(' ', ' ', str_replace('Â','',$e->innertext))."</div>";
$flag2 = 1;
}
}
}
if(($e->tag=='p' && $e->class=='Image') or ($e->tag=='p' && $e->class=='Source') or ($e->tag=='p' && $e->class=='MsoNormal'))
{
if($flag2 ==1)
{ $btn = "<div class='download-sub-menu clearfix'><div class='dl' onclick=\"dpt('".$n."');\">Download</div></div>";
}
else
{
$btn = '';
}
$e->setAttribute('class', 'pickmeimg');
$e->outertext = "<p class='image-footer'>".str_replace(' ', ' ', str_replace('Â','',preg_replace('/#.*?(<img.+?>).*?#is', '',$e->plaintext)))."</p></div>".$btn."</div>";
$flag3 = 1;
$flag2 = 0;
}
}
我已经将大部分功能从 php 更改为 jquery,现在这个过程非常快,正如我想要的那样。