Всем привет ! Итак имеем: PHP: <php $poisk='/<div class=\"sp-wrap\">.+?(<\/div>\s<\/div>)/si'; // получаем внушительный объем инфы (то что в дивах) preg_match_all($poisk,$str,$match); $new1=$match[0]; foreach($new1 as $key)// перебираем все что попало в дивы. { echo $key; echo '<br>'; } ?> В дивах по идее должен находится английский текст. Но иногда так случается, что в нем присутствуют русские слова. Т.е. в дивах бывает: 1. То что надо Код (Text): 01. Bir Anda (Remix)<br /> 02. Araba<br /> 03. Kalmadi<br /> 04. Denize Dogru<br /> 05. Bir Tanem<br /> 06. Bir Anda<br /> 07. Gidenlerden<br /> 2. Плохо, но не критично тут русские слова выдеру регуляркой Код (Text): 01. время 03-40 Bir Anda (Remix)<br /> 02. время 02-15 Araba<br /> 03. Kalmadi<br /> 04. Denize Dogru<br /> 05. Bir Tanem<br /> 06. Bir Anda<br /> 07. Gidenlerden<br /> 3. Критично. Если выдергивать регуляркой русские слова получается остается тарабанщина. Лучше, чтобы див вообще не выводился. Иначе останется только jackson, Elvis Код (Text): Мустафа стал писать музыку для известных турецких певцов - jackson, Elvis и других.<span class="post-br"><br /></span>Мустафа выпустил свой альбом "Suç Bende"(русск. Я виноват) в 1994 году. Альбом был раскуплен тиражом в 1,7 млн. экземпляров и Дык вот те дивы в которых есть русские слова применительно к 3 варианту не должны выводиться в foreach. Код (Text): { // думаю вставить условие тут типа if ..возможно не прав echo $key; echo '<br>'; } Мысли придумать регулярку но текскт очень разношерстный...думаю нужна какая то строковая функция которая вернет true или false и в тандеме с проверкой на IF даст выдать нужные дивы. Очень прошу любых советов.
Есть одна мысль ... Звучит так: Сравнить кол-о английских букв против русских такое возможно ?? речь идет о дивах. такой вариант бы меня точно устроил так как если русского текста больше половины ..значит этот div мне точно не нужен.
Dima4321 выбираешь необходимые дивы - регуляркой; выделяешь оттуда только текст - стрип тагс. подсчитываешь слова в диве - разбиваешь на слова регуляркой или explode-ом, бежишь по массиву, сравниваешь отношение кол-ва русских и английских слов. вроде так
Gromo Вот здесь не понятно. Как изначально дать понять массиву, что он состоит из двух типов: 1. Русские слова 2. Английские Функция ??? Вот накропал но с другим уклоном: Код (Text): foreach($new1 as $key) { if(preg_match_all('/^.{1,50}<br \/>$/mi',$key,$match)) { echo $key; echo '<br>'; } Помогает решить задачу процентов на 95 ...все равно выводится переодически русский текст . Поэтому только сравнение текста по языковому признаку является наиболее оптимальным решением задачи.
значит вот такой код отдельно работает корректно PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); $n='Hello my old friend. Привет, ты лучший.'; preg_match_all('/\b([a-z]+)\b/si',$n,$match); $kol=count($match[1]); echo $kol; preg_match_all('/\b([а-я]+)\b/si',$n,$match); $kol2=count($match[1]); echo '<br>'; echo $kol2; echo '<br>'; if($kol>$kol2) { echo "английских слов больше чем русских"; } ?> и о чудо заработал даже этот)) Код (Text): foreach($new1 as $key) { preg_match_all('/\b([a-z]+)\b/si',$key,$match); $kol=count($match[1]); echo $kol; echo '<br>'; preg_match_all('/\b([а-я]+)\b/si',$key,$match); $kol2=count($match[1]); echo $kol2; echo '<br>'; if($kol>$kol2) { $new1=preg_replace('/[а-я]+/si','',$key); echo $new1; echo '<br>'; } }
есть еще одна не приятность... иногда из за латинских тегов он начинает думать, что английских букв больше. Соотве-о выводит ненужыне дивы. хочу дополнительно к $kol прибавить еще 40. Как это можно сделать ?? Жалкие попытки не увенчались успехом. Код (Text): $kol="$kol+40"; или Код (Text): $kol=="$kol+40"; Как можно сложить 2 цифры и сохранить в переменную. Стоит учесть что первая цифра это результат фунции count. Помогите пожалуйста.
strip_tags ДО подсчёта слов не пробовал? действительно жалкие. как можно складывать в строке?! $kol += 40; $kol = $kol + 40;
Ты знаешь сам код обрабатывается кучей регулярок и даже strip_tags там был )) меняя куски случилось так, что на больших объемах он начал выдовать пустоту. Поэтому я его оптимизировал по разному.)) удаляя лишнее + читабельность. я понял, что надо оставить не просто 2-3 тега в конченом тексте , а по-видимому больше . Я понял о чем ты говоришь, попробую strip_tags без вывода, а толька в качестве промежуточного буфера для условия Спасибо Gromo