.*
чтобы .* включал всё до первого символа, ставим знак вопроса - ? тоесть
.*?all
он заберёт всё до all, а как обозначить этот all перед .*
?дело в том, что мне нужно выдрать отсюда код ссылки all
<A HREF=/?1-3-0-00000013-000-210-0>15</A> <A HREF=/?1-3-0-00000013-000-225-0>16</A> <A HREF=/?1-3-0-00000013-000-240-0>17</A> <A HREF=/?1-3-0-00000013-000-255-0>18</A> <A HREF=/?1-3-0-00000013-000-270-0>19</A> <A HREF=/?1-3-0-00000013-000-285-0>20</A> <A HREF=/?1-3-0-00000013-000-300-0>21</A> <A HREF=/?1-3-0-00000013-000-315-0>22</A> <a href=/?1-3-0-00000013-000-10001-0>All</A>
но если я пишу
preg_match("/(href=.*?>All<\/A>)/si", $contents, $contentszz);
то регулярка получает не только all но и 15 и 16 и всё до all, как сказать ей, "до первого знака = слева от .*" ?
уже час мучаюсь, помогите)
Спустя 17 минут, 45 секунд (15.07.2010 - 21:04) qpayct написал(а):
$text = "<A HREF=/?1-3-0-00000013-000-210-0>15</A> <A HREF=/?1-3-0-00000013-000-225-0>16</A> <A HREF=/?1-3-0-00000013-000-240-0>17</A> <A HREF=/?1-3-0-00000013-000-255-0>18</A> <A HREF=/?1-3-0-00000013-000-270-0>19</A> <A HREF=/?1-3-0-00000013-000-285-0>20</A> <A HREF=/?1-3-0-00000013-000-300-0>21</A> <A HREF=/?1-3-0-00000013-000-315-0>22</A><a href=/?1-3-0-00000013-000-10001-0>All</A>";
echo preg_match('#(\<a href=(?:.*?)\>all\<\/a\>)#is',$text);
Спустя 2 минуты, 45 секунд (15.07.2010 - 21:07) nvrskozzy написал(а):
не вышло. он опять забрал предыдущие ссылки..
Спустя 11 минут, 8 секунд (15.07.2010 - 21:18) DedMorozzz написал(а):
#(?<=>).+?all# а так?
Спустя 14 минут, 46 секунд (15.07.2010 - 21:33) nvrskozzy написал(а):
?<= почему-то тоже не помогали, он хавал всё что перед all стоит, боюсь прослыть еретиком, но после того как ?<= не помогло я так понял что это просто определяет что идёт слева от искомого, перед ним, но не говорит что нужно использовать ближайшее к искомому совпадение, тоесть собирает до последнего от искомого совпадения и вбирает в себя все ссылки)
Спустя 7 минут, 3 секунды (15.07.2010 - 21:40) qpayct написал(а):
Цитата (nvrskozzy @ 15.07.2010 - 20:07) |
не вышло. он опять забрал предыдущие ссылки.. |
совпадение найдено 1 а значит всё работает. ты просто используешь регулярку неправильно видимо
Спустя 38 минут, 3 секунды (15.07.2010 - 22:18) DedMorozzz написал(а):
Так, а что тебе надобно получить. То что внутри ХРЕФа? Если да, то что мешает писать так:
А если всё полностью, то вот так:
Т.е. регулярка находит последний закрывающий тег А, который перед ALL и берёт весь контент до ALL.
$a=preg_replace("#.*<A HREF=(.*)>ALL.*#uis",'$1',$a);
А если всё полностью, то вот так:
$a=preg_replace("#.*</A>(.*)ALL.*#uis",'$1',$a);
Т.е. регулярка находит последний закрывающий тег А, который перед ALL и берёт весь контент до ALL.
Спустя 2 минуты, 14 секунд (15.07.2010 - 22:20) qpayct написал(а):
а точно , блин, про "жадность" забыл, пардон
Спустя 13 часов, 46 минут, 37 секунд (16.07.2010 - 12:07) nvrskozzy написал(а):
Цитата (DedMorozzz @ 15.07.2010 - 19:18) |
А если всё полностью, то вот так:$a=preg_replace("#.*</A>(.*)ALL.*#uis",'',$a); Т.е. регулярка находит последний закрывающий тег А, который перед ALL и берёт весь контент до ALL. |
а ссылок много подряд в одной строке.. в (.*) не попадёт ли несколько ссылок?)
Спустя 2 дня, 1 час, 1 минута, 59 секунд (18.07.2010 - 13:09) nvrskozzy написал(а):
тут ещё один вопрос, подскажите пожалуйста как в регулярке показать "любые символы кроме тегов <br>" ? как прописать например любые символы кроме < понятно -
тоесть как прописать набор символов, [^<br>] не работает..
.[^<]*
я так делал, работало, жадность точки работала до первого тега, а как сделать чтоб жадная точка ела всё, но не до первого тега, а именно до первого тега <br>? тоесть как прописать набор символов, [^<br>] не работает..
Спустя 1 час, 13 минут, 26 секунд (18.07.2010 - 14:23) nvrskozzy написал(а):
помогите 2 день скрипт не двигается с мёртвой точки
Спустя 26 минут, 31 секунда (18.07.2010 - 14:49) DedMorozzz написал(а):
Цитата |
.*</A>(.*)ALL.*#uis |
Находит всё, до самого последнего закрытого тега А. Далее всё берёт до слова ALL. Сначала проверь, далее спрашивай
Спустя 1 час, 54 минуты, 7 секунд (18.07.2010 - 16:43) nvrskozzy написал(а):
спс, просто не понял принципа работы) не подскажешь что именно тут говорит скрипту идти до самог опоследнего тега </a> ? чтоб далее сам мог подобные задачи решать)
и что значит "u" после "/" )
и что значит "u" после "/" )
Спустя 19 минут, 45 секунд (18.07.2010 - 17:03) DedMorozzz написал(а):
есть 2 вида "поиска" регуляркой. "Жадный" и "ленивый". Жадный - ".*", Ленивый - .*?
Пример: $a="aaa ccc aaa ccc";
введя ".*ccc " ты получишь "aaa ccc aaa" - т.е. пытаеться найти максимальное совпадение с шаблоном, а если укажешь "ленивый" поиск, то будет найдено первое совпадение. Т.е. только "aaa"
Пример: $a="aaa ccc aaa ccc";
введя ".*ccc " ты получишь "aaa ccc aaa" - т.е. пытаеться найти максимальное совпадение с шаблоном, а если укажешь "ленивый" поиск, то будет найдено первое совпадение. Т.е. только "aaa"
Спустя 13 минут, 19 секунд (18.07.2010 - 17:16) qpayct написал(а):
просто и понятно:
. - любой символ
* - любое колличество символов указаных до
? - только один или вообще нет
.*? - любое колличество символов только один раз или ничего
.* - любое колличество символов любое колличество раз или ничего
можно ещё вот так написать
.*+ - любое колличество символов любое колличество раз. минимум один
все тонкости можно найти и почитать на первоисточнике:
http://www.php.net/manual/en/pcre.pattern.php
. - любой символ
* - любое колличество символов указаных до
? - только один или вообще нет
.*? - любое колличество символов только один раз или ничего
.* - любое колличество символов любое колличество раз или ничего
можно ещё вот так написать
.*+ - любое колличество символов любое колличество раз. минимум один
все тонкости можно найти и почитать на первоисточнике:
http://www.php.net/manual/en/pcre.pattern.php
Спустя 29 минут, 26 секунд (18.07.2010 - 17:46) nvrskozzy написал(а):
аяя не так не так)) пардон) всё я не так объяснил и не так понял)
про ? я знал, но фишка в том, что он показывает регулярке что нужнол до первого вхождения символа который идёт после ? тоесть справа от жадной точки, но если слева от точки?
вот с этим я чё-то затупил.. .*</A>(.*)ALL.*#uis
да он найдёт до последнего вождения тега а )
фишка-то в чём.. чего спрашивал про ограничение жадной точки слева а не справа, тоесть до неё..
мне нужно примерно так:
.*</A> .*</A>(.*)ALL.*#uis
тоесть не просто до последнего тега дойти, а до нескольких последних, например трёх.
чтоб нашёл то что в скобках "</A>текст</A>текст(</A>текст</A>текст</A>ALL)"
тоесть при обычном написании .*</A> .*</A>(.*)ALL.*#uis в жадную точку попадёт много тегов, а мне нужно чтоб взялось несколько последних..
знак вопроса ? ограничивает точку в поиске вперёд.. а мне кагбе назад надо)
про ? я знал, но фишка в том, что он показывает регулярке что нужнол до первого вхождения символа который идёт после ? тоесть справа от жадной точки, но если слева от точки?
вот с этим я чё-то затупил.. .*</A>(.*)ALL.*#uis
да он найдёт до последнего вождения тега а )
фишка-то в чём.. чего спрашивал про ограничение жадной точки слева а не справа, тоесть до неё..
мне нужно примерно так:
.*</A> .*</A>(.*)ALL.*#uis
тоесть не просто до последнего тега дойти, а до нескольких последних, например трёх.
чтоб нашёл то что в скобках "</A>текст</A>текст(</A>текст</A>текст</A>ALL)"
тоесть при обычном написании .*</A> .*</A>(.*)ALL.*#uis в жадную точку попадёт много тегов, а мне нужно чтоб взялось несколько последних..
знак вопроса ? ограничивает точку в поиске вперёд.. а мне кагбе назад надо)
Спустя 7 минут, 44 секунды (18.07.2010 - 17:53) DedMorozzz написал(а):
Цитата |
.*+ - любое колличество символов любое колличество раз. минимум один |
Избыточно. + это и есть 1 и более. И по сему .*+ и .+ одно и то же.
Спустя 7 минут (18.07.2010 - 18:00) qpayct написал(а):
DedMorozzz
ну это я так, импровизанул
спасибо за поправку
ну это я так, импровизанул
спасибо за поправку
Спустя 2 часа, 1 минута, 42 секунды (18.07.2010 - 20:02) nvrskozzy написал(а):
на вопрос выше никто не знает ответа?)
Спустя 8 минут, 38 секунд (18.07.2010 - 20:11) DedMorozzz написал(а):
как же ты не любишь думать. САМ уже почти написал ответ. в суме с постами выше он у тебя уже есть
не так
не так
Цитата |
.*</A> .*</A>(.*)ALL.*#uis |
а
.*</A> .+?</A>(.*)ALL.*#uis
Спустя 20 минут, 9 секунд (18.07.2010 - 20:31) nvrskozzy написал(а):
ну дак не работает жеш)
вот только что оттестил такой кусок
php require бла бла это в коде страницы находится..
в итоге в 1 ячейке текст после первого бра на странице, во второй всё остальное до php require с кучей бров и прочих тегов..
вот только что оттестил такой кусок
preg_match ("/(?:.*?<br>)(.*?)<br>(.*?)(<\?php require\(\"u\.php\"\))/is", "$gggg2", $dobavka);
php require бла бла это в коде страницы находится..
в итоге в 1 ячейке текст после первого бра на странице, во второй всё остальное до php require с кучей бров и прочих тегов..
Спустя 23 часа, 7 минут, 29 секунд (19.07.2010 - 19:38) -=CASPER=- написал(а):
Не буду тему создавать новую тут напишу.
У меня такая проблема не получается создать регулярку.
нужно чтобы она искала в тесте http:// и начиная от этого преобразовывала всё в ссылку до первого пробела.
Вот как я делаю:
всё вродебы нормально. Но как только http:// начинается с новой строки под ссылку поподает весь текст и ограничение до пробела не помогает.
Почему так? Помогите исправить
У меня такая проблема не получается создать регулярку.
нужно чтобы она искала в тесте http:// и начиная от этого преобразовывала всё в ссылку до первого пробела.
Вот как я делаю:
$text = preg_replace('/http:\/\/(.*)\s/is','<a href="http://$1">$1</a> ',$text);
всё вродебы нормально. Но как только http:// начинается с новой строки под ссылку поподает весь текст и ограничение до пробела не помогает.
Почему так? Помогите исправить
Спустя 5 минут, 56 секунд (19.07.2010 - 19:44) DedMorozzz написал(а):
почитай про модификатор s. И думаю все вопросы отпадут
nvrskozzy - увидел твой пост, потом отвечу. занят.
nvrskozzy - увидел твой пост, потом отвечу. занят.
Спустя 57 минут, 24 секунды (19.07.2010 - 20:42) qpayct написал(а):
во первых да, тут модификатор s скорей всего не нужен, если ссылка не растягивается на несколько строк, иначе нужен, а во вторых проблема в уже рассмотреной выше "лени"
$text = preg_replace('/http:\/\/(.*)/i', '<a href="http://$1">$1</a> ', $text);
Спустя 2 часа, 4 минуты (19.07.2010 - 22:46) -=CASPER=- написал(а):
Если так писать то тогда в ссылку идёт весь текст, если ссылка с новой строки начинается.
И ограничивать до пробела если - не помогает
/http:\/\/(.*)\s/i
И ограничивать до пробела если - не помогает
/http:\/\/(.*)\s/i
Спустя 3 минуты, 25 секунд (19.07.2010 - 22:49) qpayct написал(а):
-=CASPER=-
ты не привёл пример, что хранится в $text
откудаж людям знать, что надо?
ты не привёл пример, что хранится в $text
откудаж людям знать, что надо?
Спустя 3 минуты, 44 секунды (19.07.2010 - 22:53) -=CASPER=- написал(а):
В $text хранится текст из БД. Который заносится туда пользователем при добавлении сообщений. И как в базе будет распологаться ссылка это дело пользователя. Как он её напишет при добавлении сообщения
Спустя 17 минут, 13 секунд (19.07.2010 - 23:10) qpayct написал(а):
тоесть ты хочешь находить в этом тексте адреса и делать из них ссылки? так и пиши:
$text = "prefetching is currently only supported by Firefox.а то излагаешь непонятно и с ошибками
But since http://www.mozilla-europe.org/ru/firefox/
is the second most popular web browser in the world, you
can noticeably decrease load times for a significant chunk
of your users just by adding one line of code to your HTML.
Pretty cool, huh?";
$text = preg_replace('/http:\/\/(.*?) /i', '<a href="http://$1">$1</a> ', $text);
echo $text;
Спустя 9 минут, 26 секунд (19.07.2010 - 23:19) -=CASPER=- написал(а):
Да, я не спорю это будет работать, но только если ссылка не начинается с начала строки.
этот метод уже не работает, вот про что я говорю.
$text = "prefetching is currently only supported by Firefox. But since
http://www.mozilla-europe.org/ru/firefox/ is the second most popular web browser in the world, you can noticeably decrease load times for a significant chunk of your users just by adding one line of code to your HTML. Pretty cool, huh?";
$text = preg_replace('/http:\/\/(.*?)\s/i', '<a href="http://$1">$1</a> ', $text);
echo $text;
этот метод уже не работает, вот про что я говорю.
Спустя 10 минут, 42 секунды (19.07.2010 - 23:30) qpayct написал(а):
всё работает мозги не парь, а если не работает приводи конкретный пример что не работает
Спустя 4 минуты, 41 секунда (19.07.2010 - 23:35) -=CASPER=- написал(а):
Вот смотри пример, только что сообщение написал
http://waplod.net.ru/forum/messages.php?id_teme=1
http://waplod.net.ru/forum/messages.php?id_teme=1
Спустя 9 минут, 9 секунд (19.07.2010 - 23:44) qpayct написал(а):
-=CASPER=-
да хоть 100 таких сообщений напиши, а толку?
да хоть 100 таких сообщений напиши, а толку?
Спустя 1 день, 22 часа, 31 минута, 54 секунды (21.07.2010 - 22:16) nvrskozzy написал(а):
DedMorozzz
жду)
нашёл какой-то модификатор который делает точки нежадными, поэксперементирую с ним..
жду)
нашёл какой-то модификатор который делает точки нежадными, поэксперементирую с ним..
_____________