|
|
|
| В Самоучителе сказано:
"Ищет в строке subject все совпадения с шаблоном pattern и помещает результат в массив matches в порядке, определяемом комбинацией флагов flags."
Я этого не понимаю. Что конкретно является результатом?
Допустим, строка содержит:
123ждлдлддл123ддждлжд123жджд123дждд 123жд123олд
А шаблоном является 123. Какой массив сформируется в результате работы?
(флаги указывать не будем).
========
Попытка протестировать выражение средствами, указанные в Самоучителе, не дала ничего - просто белый экран:
$test = "123ждлдлддл123ддждлжд123жджд123дждд 123жд123олд" ;
$pattern = "123";
preg_match_all($pattern, $test, $out);
foreach ($out as $adr)
{
echo $adr;
echo "<br>";
}
echo ("</ul>");
|
| |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2007 в 17:00)
| | >Попытка протестировать выражение средствами, указанные в Самоучителе, не дала ничего - просто белый экран:
возможно, Вы допустили ошибку или что-то "не то" с Вашим PHP, приведите Ваш код | |
|
|
|
|
|
|
|
для: ddhvvn
(26.03.2007 в 18:16)
| | Собственно, приведенный код и является моим кодом.
Но дело не только в нем: я не понимаю сути действия этого регулярного выражения. Вот в учебнике написано:
"Ищет в строке subject все совпадения с шаблоном pattern и помещает результат в массив matches в порядке, определяемом комбинацией флагов flags."
А какие это результаты? Вот нашлось первое совпадение - и что? Само совпадение помещают в matches? Допустим. А с несовпавшими элементами что? Их игнорируют? Или тоже помещают в массив?
Допустим, строка содержит:
$test = "123ждлдлддл123ддждлжд123жджд123дждд 123жд123олд" ;
А шаблоном является $pattern = "123";
Какой массив сформируется в результате работы? | |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2007 в 18:31)
| | Массив будет содержать шесть элементов, все из которых равны '123'.
Дело в том, что шаблон может быть сложным, скажем, шаблон
/.{3}/
будет соответствовать строкам
ааа
ббб
111
То есть - три одинаковых символа, идущих подряд. И если мы разберем строку
"Уииии! Как веееселооо!!!"
В результате мы получим массив из элементов:
| |
|
|
|
|
|
|
|
для: SHAman
(26.03.2007 в 18:38)
| | Понятно, спасибо! Похоже, что я вкладывал в него не тот смысл...
Интересно, а можно ли получить массив НЕ совпадающих с шаблоном значений? | |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2007 в 18:53)
| | Можно.
Если вы хотите найти "все, что не", то нужно использовать шаблон типа:
Под такой шаблон подходит что угодно, кроме единицы и четверки.
Если же вы хотите разделить строку по шаблону, то используйте preg_split. | |
|
|
|
|
|
|
|
для: SHAman
(26.03.2007 в 19:05)
| | На самом деле мне нужно найти все, что будет идти после "slovo1/slovo2/". Причем слеши имеют место быть и они значимы. Таких участков в тексте множество, и нужна информация по каждому из них.
Вот как это сделать? | |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2007 в 19:19)
| | Приведите кусок текста, где идет просто текст, ваши slovo1/slovo2/ другой текст, потом еще slovo1/slovo2.
То есть, дайте посмотреть какой текст и что конкретно вам из него нужно вытащить. Фраза "мне нужно найти все, что будет идти после", вероятно, не верна. Потому что: мы находим один раз искомый шаблон, а все, что идет за ним и будет этим "все, что после". Так что нужно ограничивать еще и конец поиска. | |
|
|
|
|
|
|
|
для: SHAman
(26.03.2007 в 19:24)
| | Вот такой длинный-длинный текст из похожих строк:
$text = '<font size="2">К. Бре.   Часть 1</font></a></p><p align="left"> <a href="http://site.ru/zalsf/sf01/sf01-2.htm">
<font size="2">К. Бре.   Часть 2</font></a></p><p align="left"> <a href="http://site.ru/zalsf/sf01/sf01-3.htm">
<font size="2">К. Бре.   Часть 3</font></a></p><p align="left"> <a href="http://site.ru/zalsf/sf01/sf01-4.htm">' ;
|
А я хочу превратить его в массив записей типа:
sf01/sf01-2.htm
sf01/sf01-3.htm
sf01/sf01-4.htm
И в дальнейшем этот массив я буду обрабатывать в цикле foreach, поочередно извлекая каждый из элементов массива и осуществляя с ним нужные действия.
==============
Желательно зацепиться в качестве образца за ru/zalsf/, ибо решение
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=34923&page=1 , предложенное cheops, работает на тесте из нескольких строк, но сбивается на длинном файле. | |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2007 в 19:52)
| |
$pattern = "|<a href=\"?(http:\/\/(www)?)?(.*?)\"?|";
|
Искомые вами строки должны оказаться в переменной $3. Однако, я не проверял - времени нету. Проверьте сами, если не сработает - скажите. Да! Обязательно укажите квантификаторы m и i.
$pattern = "|<a href=\"?(http:\/\/(www)?)?(.*?)\"?|im";
|
| |
|
|
|