надо узнать есть ли в имено этом тексте текст "mp3" <UL><B>Сигналы вызова</B> <UL> <LI>Полифонические : <FONT class=descr>40-тональные, MP3, MIDI, SMAF</FONT> <LI><FONT class=descr>Возможность загрузки</FONT> <LI><FONT class=descr>Редактор мелодий</FONT> </LI></UL></UL> При этом мне не извесно будет там "40-тональные" или "60-тональные", будет ли там текст "MIDI, SMAF". Тоесть этот текст в регулярном надо обозначить как неизвесный При этом учесть все лишние пробелы и переходы на новую страницу. Я пробовал /<UL><B>Сигналы вызова<\/B>[ \w\\n]+<LI>Полифонические : <FONT class=descr>[ \w]+(.*)[ \w]+<\/font>/isU Не идет
PHP: <?php // Получу все перечисленные значения $str = file_get_contents ("file.txt"); preg_match ("/Полифонические : <FONT class=descr>(.+)<\/FONT>/Usi", $str, $match); $list = explode (",", $match [1]); $list = array_map ("trim", $list); $list = array_map ("strtoupper", $list); if (in_array ("MP3", $list)) { echo "В списке есть MP3."; } else { echo "Нет нихера. :("; } Тут я записываю все значения в списке "Полифонические", в массив $list (зачем? может понадобится ).
Но при этом выберет не только mp3, а все что есть между <FONT class=descr> и </FONT> а мне надо имено текст "мр3". Надо также учесть есть ли при єтом текст <UL><B>Сигналы вызова</B> есть ли он. И все єто в одном регулярном. Тоесть как то надо обозначить произвольный текст, неизвесное число пробелов и переходов новой страници или не учесть это при поиске. Об этом я спрашивал в этом посте http://php.ru/forum/viewtopic.php?t=3577
Зачем все в одну регулярку? PHP: <?php $in_1 = (substr_count ($str, "<UL><B>Сигналы вызова</B>") > 0); Хм... сначала надо выдрать че там есть а потом уже с помощью PHP: PHP: <?php preg_match ("/Полифонические : <FONT class=descr>(.+)<\/FONT>/Usi", $str, $match); $in_2 = (substr_count ($match [1], "MP3") > 0);
Кроме этой регулярки есть еще 76 и все это идет в цикле и один раз, поэтому надо в регулярке и в одной. Примеры, которые Вы привели конечно покатятно, но на даный момент меня интересует вот такое /<UL><B>Сигналы вызова<\/B>[ \w\\n]+#рег1<LI>Полифонические : <FONT class=descr>[ \w]+#рег2(.*)[ \w]+#рег3<\/font>/isUх Правильно ли я мыслю рег1 - любое количество пробелов, текста, переходов строки (в произвольной последовательности) или ничего (пусто) рег2, рег3 - любое количество пробелов, текста (в произвольной последовательности)
Надоело... PHP: <?php if (preg_match ("/<UL><B>Сигналы вызова<\/B>.*<LI>Полифонические : <FONT class=descr>.*MP3.*<\/font>/isU", $str, $match)) { echo "Совпадение"; } else { echo "Не совпадение."; }
Мне кажется лучше так: PHP: if (preg_match_all ("/\<UL\>\<B\>Сигналы вызова\<\/B\>\s*([^\<])+\<LI\>Полифонические : <FONT class=descr>([^\.])+MP3[^\<]*\<\/font\>/isU", $str, $match)>1) { print('<pre>'); print_r($match); print('</pre>'); } else { echo "Ничего не надено!"; }
Дабы не создавать темы вопрос тут. Подскажите, пожалуйста, регулярку которая бы заменяла только знак ";", но, например, не портила бы & #59; PHP: <?php $t = preg_replace("/(?<!&#[0-9]+);/s", ';', $t ); - это не работает, в чем ошибка? PS и еще мелочный вопросец. Какую роль играет & вот в такой строке из ipb? Наследование? :/ PHP: <?php $ipsclass->print->ipsclass =& $ipsclass;
Murena а что значит 'заменяла только знак ";"'? на что заменяла? можно пример с тем, что и на что вы хотите заменить и что вы заменять не хотите? по поводу передачи по ссылке и вообще работы пхп с памятью -- очень рекомендую следующую статейку. многое объясняет : http://derickrethans.nl/files/phparch-p ... rticle.pdf
stas_t Поддержим Заменяла на html эквивалент. Если проще то задача состоит в том, чтобы все "&#здесь_число;" не трогать. А "&" "#" ";" заменять.
>>>"&#здесь_число;" не трогать. А "&" "#" ";" заменять PHP: <? $_POST['key_name'] = preg_replace('/[\D]+/','',$_POST['key_name']); ?>
Не совсем то.. Если вот такая конструкция "&#здесь_число;" то символы "&" "#" ";" не заменяем. Вот, хотя бы так сделать, заменяя только ";" ДО HTML: ; ' ' ; ПОСЛЕ HTML: ; ' ' ;
DarkElf Спасибо за помощь. В выражении {2} значит символьная длина цифр? Если да, то html эквивалент ";" можно записать как HTML: ";" и ";" в таком случае вот это выражение верно? PHP: <? $POST['key_name'] = preg_replace('/&#[0-9]{2,3};/',' ',trim($POST['key_name'])); ?>
; -- не спецсимвол в html, эквивалент точки с запятой есть только точка с запятой. то же самое касается знака диез. согласно стандарту только & должен записываться как & (и цифры тут вообще ни причём, т.к. в разных кодировках у знаков могут быть разные позиции)