Регулярка с условием

Discussion in 'PHP' started by GivioN, 20 May 2010.

  1. GivioN

    GivioN Elder - Старейшина

    Joined:
    30 Mar 2008
    Messages:
    45
    Likes Received:
    10
    Reputations:
    0
    Есть строка $ctr = "форум безопасности antichat.ru";
    Есть массив $a с неизвестным количесвом элементов, например 3:
    $a[0] = "фор";
    $a[1] = "без";
    $a[2] = "icha";

    $cnt = count ($a); // тут считаем количесво элементов массива, так как оно не известно.

    Как сделать условие:
    Если в строке присутствуе эти массивы, то делаем то-то.

    if ( preg_match ('/что-то тут пишем/' , $ctr) ) {
    выполняем то что нужно
    }
     
    #1 GivioN, 20 May 2010
    Last edited: 20 May 2010
  2. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    PHP:
    $ctr "форум безопасности antichat.ru";
    $a=array('фор''без''icha');
    foreach (
    $a as $value) {
    if ( 
    preg_match ('/'.$value.'/' $ctr) ) {
    echo 
    "Найдено вхождение $value.";
    }
    }
     
    1 person likes this.
  3. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    PHP:
    $ctr "форум безопасности antichat.ru";
    $a[0] = "фор";
    $a[1] = "без";
    $a[2] = "icha";
    $f=1;
    foreach(
    $a as $el)
    {
        if(!
    preg_match("/$el/",$ctr)) {$f=0;break;}

    }
    if(
    $f)
    {
    //делай чо нужно, все элементы массива были найдены в $ctr
    }
     
    #3 4upakabr0, 20 May 2010
    Last edited: 20 May 2010
    1 person likes this.
  4. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    > if(!preg_match("/$el/",$ctr)) {$f=0;break;}
    в таком случае лучше использовать substr_count() без всяких регулярок
    if(substr_count($ctr,$el)==0){$f=0;break;}
     
    #4 roxblnfk, 20 May 2010
    Last edited: 20 May 2010
    1 person likes this.
  5. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Во-первых, не
    PHP:
    substr_count($ctr,$el)>0
    а
    PHP:
    substr_count($ctr,$el)==0
    Во-вторых, чем оно лучше?
    В-третьих, читай ТС и его вопрос внимательнее дабы понять какими средствами ему необходимо сделать :)
     
  6. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    протестировал, работает, хотя и не правильно :)
    PHP:
    $body='atwo one1 threee ';
    $val = array('one','two','three');
    $str '('.implode('|',$val).')';
    $arr=array_fill(0,count($val),$str);
    $text='/'.implode('.*.',$arr).'/';
    echo 
    preg_match($text,$body);
     
    #6 roxblnfk, 20 May 2010
    Last edited: 20 May 2010
  7. GivioN

    GivioN Elder - Старейшина

    Joined:
    30 Mar 2008
    Messages:
    45
    Likes Received:
    10
    Reputations:
    0
    Да, уж не ожидал что будет такая горячая темка, горячие посты уже удалили.
    Вообщем спасибо всем, кто отписался. особенно 4upakabr0, твой вариант помог, то что надо.
    Поставил +++ но чет не добавилось.