За последние 24 часа нас посетили 26997 программистов и 1512 роботов. Сейчас ищут 858 программистов ...

Придумать проверочное условие. Голову сломал ))

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 16 янв 2011.

  1. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Всем привет !

    Итак имеем:
    PHP:
    1. <php
    2.  
    3. $poisk='/<div class=\"sp-wrap\">.+?(<\/div>\s<\/div>)/si'; // получаем внушительный объем инфы (то что в дивах)
    4.  
    5. preg_match_all($poisk,$str,$match);
    6.  
    7.  
    8. $new1=$match[0];
    9.  
    10.  
    11. foreach($new1 as $key)// перебираем все что попало в дивы.
    12. {
    13.  
    14. echo $key;
    15. echo '<br>';
    16. }
    17.  
    18. ?>
    В дивах по идее должен находится английский текст. Но иногда так случается, что в нем присутствуют русские слова.

    Т.е. в дивах бывает:

    1. То что надо

    Код (Text):
    1. 01. Bir Anda (Remix)<br />
    2. 02. Araba<br />
    3. 03. Kalmadi<br />
    4. 04. Denize Dogru<br />
    5. 05. Bir Tanem<br />
    6. 06. Bir Anda<br />
    7. 07. Gidenlerden<br />
    2. Плохо, но не критично тут русские слова выдеру регуляркой

    Код (Text):
    1. 01. время 03-40 Bir Anda (Remix)<br />
    2. 02. время 02-15 Araba<br />
    3. 03. Kalmadi<br />
    4. 04. Denize Dogru<br />
    5. 05. Bir Tanem<br />
    6. 06. Bir Anda<br />
    7. 07. Gidenlerden<br />

    3. Критично. Если выдергивать регуляркой русские слова получается остается тарабанщина. Лучше, чтобы див вообще не выводился. Иначе останется только jackson, Elvis

    Код (Text):
    1. Мустафа стал писать музыку для известных турецких певцов - jackson, Elvis и других.<span class="post-br"><br /></span>Мустафа выпустил свой альбом "Suç Bende"(русск. Я виноват) в 1994 году. Альбом был раскуплен тиражом в 1,7 млн. экземпляров и

    Дык вот те дивы в которых есть русские слова применительно к 3 варианту не должны выводиться в foreach.


    Код (Text):
    1. {
    2. // думаю вставить условие тут типа if ..возможно не прав
    3. echo $key;
    4. echo '<br>';
    5. }
    Мысли придумать регулярку но текскт очень разношерстный...думаю нужна какая то строковая функция которая вернет true или false и в тандеме с проверкой на IF даст выдать нужные дивы.

    Очень прошу любых советов.
     
  2. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Есть одна мысль ... Звучит так:

    Сравнить кол-о английских букв против русских такое возможно ?? речь идет о дивах.

    такой вариант бы меня точно устроил так как если русского текста больше половины ..значит этот div мне точно не нужен.
     
  3. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    выбираешь необходимые дивы - регуляркой; выделяешь оттуда только текст - стрип тагс.
    подсчитываешь слова в диве - разбиваешь на слова регуляркой или explode-ом,
    бежишь по массиву, сравниваешь отношение кол-ва русских и английских слов.
    вроде так
     
  4. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Gromo


    Вот здесь не понятно. Как изначально дать понять массиву, что он состоит из двух типов:

    1. Русские слова
    2. Английские

    Функция ???


    Вот накропал но с другим уклоном:

    Код (Text):
    1. foreach($new1 as $key)
    2. {
    3. if(preg_match_all('/^.{1,50}<br \/>$/mi',$key,$match))
    4. {
    5. echo $key;
    6. echo '<br>';
    7. }

    Помогает решить задачу процентов на 95 ...все равно выводится переодически русский текст .

    Поэтому только сравнение текста по языковому признаку является наиболее оптимальным решением задачи.
     
  5. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    '/[a-z]/is' - английский текст
    '/[а-я]/is' - русский текст

    Остается правильно настроить локаль.
     
  6. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    значит вот такой код отдельно работает корректно

    PHP:
    1. <?php
    2.   ini_set('display_errors',1);
    3.   error_reporting(E_ALL);
    4.  
    5.   setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
    6.  
    7. $n='Hello my old friend. Привет, ты лучший.';
    8.    
    9. preg_match_all('/\b([a-z]+)\b/si',$n,$match);
    10.  
    11. $kol=count($match[1]);
    12. echo $kol;
    13.  
    14. preg_match_all('/\b([а-я]+)\b/si',$n,$match);
    15.  
    16. $kol2=count($match[1]);
    17. echo '<br>';
    18. echo $kol2;
    19. echo '<br>';
    20.  
    21. if($kol>$kol2)
    22. {
    23. echo "английских слов больше чем русских";
    24. }
    25.  
    26.   ?>
    и о чудо заработал даже этот))


    Код (Text):
    1. foreach($new1 as $key)
    2.  
    3. {
    4. preg_match_all('/\b([a-z]+)\b/si',$key,$match);
    5. $kol=count($match[1]);
    6. echo $kol;
    7. echo '<br>';
    8.  
    9. preg_match_all('/\b([а-я]+)\b/si',$key,$match);
    10. $kol2=count($match[1]);
    11. echo $kol2;
    12. echo '<br>';
    13.  
    14. if($kol>$kol2)
    15. {
    16. $new1=preg_replace('/[а-я]+/si','',$key);
    17. echo $new1;
    18. echo '<br>';
    19. }
    20. }
     
  7. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    есть еще одна не приятность...

    иногда из за латинских тегов он начинает думать, что английских букв больше. Соотве-о выводит ненужыне дивы.

    хочу дополнительно к $kol прибавить еще 40. Как это можно сделать ??


    Жалкие попытки не увенчались успехом.

    Код (Text):
    1. $kol="$kol+40";
    или

    Код (Text):
    1. $kol=="$kol+40";
    Как можно сложить 2 цифры и сохранить в переменную.

    Стоит учесть что первая цифра это результат фунции count.

    Помогите пожалуйста.
     
  8. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот правилоьное выражение


    Код (Text):
    1. $kol2="$kol2"+40;
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    strip_tags ДО подсчёта слов не пробовал?

    действительно жалкие. как можно складывать в строке?!
    $kol += 40; $kol = $kol + 40;
     
  10. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Ты знаешь сам код обрабатывается кучей регулярок и даже strip_tags там был )) меняя куски случилось так, что на больших объемах он начал выдовать пустоту.

    Поэтому я его оптимизировал по разному.)) удаляя лишнее

    + читабельность. я понял, что надо оставить не просто 2-3 тега в конченом тексте , а по-видимому больше .

    Я понял о чем ты говоришь, попробую strip_tags без вывода, а толька в качестве промежуточного буфера для условия

    Спасибо Gromo