Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.153.38] |
|
Сообщ.
#1
,
|
|
|
Привет всем !!!
Начал изучать регулярные выражения и сразу же столкнулся с проблемой составления нужного мне выражения. Требуется подсказка Итак, мне нужно выделить текст, который находится внутри определённого набора символов. Например, мне нужно найти в документе все ссылки: ... $s1 = "<a href="; $s2 = ">"; $str = '<a href="http://www.mysite.net/script?searchtext=string&form_type=simple">My string</a>'; ... Как мне выделить из $str ссылку, то есть текст находящийся между строками $s1 и $s2 ? |
Сообщ.
#2
,
|
|
|
PHP FAQ: Регулярные выражения.
Там и далее имеются примеры готовых решений. Добавлено Цитата bur80 @ Подсказка - это когда ты что-то сделал, но у тебя какой-то непонятный затык. Поэтому когда просишь подсказку - разумно демонстрировать свои попытки решить проблему. Требуется подсказка |
Сообщ.
#3
,
|
|
|
Я помню как я читал мануалы о регулярных выражениях и ничего немог понять.
Я привык работать с PERL compatible выражениями, т.к. они имеют больше возможностей и гораздо быстрее. В данном случае я бы сделал так: $count_of_array = preg_match_all("/<a href=(.*)>/U","<a href=\"jkghsdj\"></a>", $ee, PREG_PATTERN_ORDER); echo $ee[1][0]; Обясню как что работает! preg_match_all возвращяет все совпадения в массив $ee, PREG_PATTERN_ORDER - флаг, каторый озночает что $ee[0][$j] содерзчит полные совпадения, а $ee[1][$j] - совпадения первой подмаски (подмаска ето то что в регулиарном выражении в скобках - т.е. (.*)). знак .* означает все символы. А вообще почитай о регулярных выражениях тут, и о функциях в PHP, каторые работают с регулярными выражениями (тут) |
Сообщ.
#4
,
|
|
|
Цитата SiMM @ PHP FAQ: Регулярные выражения. Там и далее имеются примеры готовых решений. Добавлено Цитата bur80 @ Подсказка - это когда ты что-то сделал, но у тебя какой-то непонятный затык. Поэтому когда просишь подсказку - разумно демонстрировать свои попытки решить проблему.Требуется подсказка Изучаю документацию, будут вопросы - задам в этой ветке. |
Сообщ.
#5
,
|
|
|
Документации, как всегда, море Помогите составить регулярку. Скажем, есть строка "мы делили апельсин, много наших полегло". Мне нужно вывести слово, в котором содержиться строка апел, то есть в результате я должен получить слово апельсин. Как ?
Добавлено Edva, не совсем удачный для меня пример Мне нужны примеры поиска позиции начала/конца определённого слова в строке и т.п. |
Сообщ.
#6
,
|
|
|
Цитата bur80 @ Документации, как всегда, море Помогите составить регулярку. Скажем, есть строка "мы делили апельсин, много наших полегло". Мне нужно вывести слово, в котором содержиться строка апел, то есть в результате я должен получить слово апельсин. Как ? <? $s = "мы делили апельсин, много наших полегло"; preg_match("/(апел[^\W]+)/i", $s, $matches); echo $matches[1]; ?> Так? |
Сообщ.
#7
,
|
|
|
Цитата bur80 @ Мне нужны примеры поиска позиции начала/конца определённого слова в строке и т.п. т.е. тибе нужен номер позиции начала и конца? |
Сообщ.
#8
,
|
|
|
Цитата т.е. тибе нужен номер позиции начала и конца? И это тоже Вообще, неплохо было бы иметь готовые примеры решения различных, наиболее типичных, задач. Ну, для самообучения естественно. Добавлено Цитата Mastilior @ Цитата bur80 @ Документации, как всегда, море Помогите составить регулярку. Скажем, есть строка "мы делили апельсин, много наших полегло". Мне нужно вывести слово, в котором содержиться строка апел, то есть в результате я должен получить слово апельсин. Как ? <? $s = "мы делили апельсин, много наших полегло"; preg_match("/(апел[^\W]+)/i", $s, $matches); echo $matches[1]; ?> Так? Да, спасибо |
Сообщ.
#9
,
|
|
|
Цитата почитай пропримеры поиска позиции начала/конца определённого слова в строке \b - соответствует границе слова(то есть точке между символом слова и символом не входящим в состав слова) \B - соответствует позиции, которая не явл. границей слова может тебе это облегчит задачу... |
Сообщ.
#10
,
|
|
|
Дж. Фридл, Регулярные выражения, библиотека программиста, 2е издание, Изд. Питер, 2003
http://unix.onanizm.ru/misc/regexp.djvu |
Сообщ.
#11
,
|
|
|
Цитата SiMM @ Дж. Фридл, Регулярные выражения, библиотека программиста, 2е издание, Изд. Питер, 2003 http://unix.onanizm.ru/misc/regexp.djvu Скачал, а что это за формат такой djvu ? Открыть бы теперь |
Сообщ.
#12
,
|
|
|
Читалку можно взять, например, здесь
DjVuWebBrowserPlugin_EN.exe - плагин к IE. DjVuSolo3.1-noncom.exe - отдельное приложение. |
Сообщ.
#13
,
|
|
|
Чтобы найти слово содержащее некоторый символ мы используем такую комбинацию:
Цитата , а что если мне нужно задать ещё одно условие, как в этом случае будет выглядеть выражение ? "/(апел[^\W]+)/i" Добавлено Ещё мне требуется наиболее полная таблица метасимволов, которые используются в регулярных выражениях Добавлено SiMM, спасибо за ссылки |
Сообщ.
#14
,
|
|
|
Цитата bur80 @ Какое?а что если мне нужно задать ещё одно условие Цитата bur80 @ Ещё мне требуется наиболее полная таблица метасимволов, которые используются в регулярных выражениях PHP Manual: Регулярные выражения в деталях - Метасимволы |
Сообщ.
#15
,
|
|
|
Цитата Какое? Мне нужно сделать что-то типа: Цитата /условие1/и/условие2/ Иными словами, как задать 2 условия в одном выражении и каким символом они должны быть разделены ? |
Сообщ.
#16
,
|
|
|
bur80, пример приведи. Потому что для "и", как я его понимаю, ничего делать не нужно.
|
Сообщ.
#17
,
|
|
|
Цитата SiMM @ bur80, пример приведи. Потому что для "и", как я его понимаю, ничего делать не нужно. Ну, например, если мне нужно найти наличие некоей последовательности символов, то я могу сделать так: Цитата /abc/i Если мне нужно найти слово, содержащее определённую последовательность символов, то я делаю так: Цитата /апел(^[\W]+)/i Как мне найти то, что содержиться между двумя разными последовательностями символов ? Понимаю, что вопрос тривиальный, но не могу найти удачный пример, чтобы понять как работает механизм регулярных выражений Итак, я знаю как найти одну последовательность символов, а как найти наличие двух разных последовательностей ? Ну, например, abc и qwe ? |
Сообщ.
#18
,
|
|
|
/abc(.*?)qwe/s
Ты это имел в виду? В 1м "кармане" будет то, что тебе нужно. |
Сообщ.
#19
,
|
|
|
Цитата SiMM @ /abc(.*?)qwe/s Ты это имел в виду? В 1м "кармане" будет то, что тебе нужно. Да, это А чем 1-й карман от второго отличается и от нулевого ? |
Сообщ.
#20
,
|
|
|
Цитата bur80 @ Номером А чем 1-й карман от второго отличается и от нулевого ? Нулевой карман - это всё, что вошло в регулярник. Остальные карманы нумеруются от единицы (первая парная скобка - первый карман, вторая - второй и т.д.). Это если забыть о существовании (?:...) |
Сообщ.
#21
,
|
|
|
Цитата SiMM @ Цитата bur80 @ Номером А чем 1-й карман от второго отличается и от нулевого ? Нулевой карман - это всё, что вошло в регулярник. Остальные карманы нумеруются от единицы (первая парная скобка - первый карман, вторая - второй и т.д.). Это если забыть о существовании (?:...) Насколько я понял, в массив выводятся результаты регулярного выражения, так вот не пойму по какому принципу ? Вроде как результат регулярного выражения один или как ? |
Сообщ.
#22
,
|
|
|
Цитата bur80 @ preg_match_all Насколько я понял, в массив выводятся результаты регулярного выражения, так вот не пойму по какому принципу ? |
Сообщ.
#23
,
|
|
|
Цитата bur80 @ Привет всем !!! Начал изучать регулярные выражения и сразу же столкнулся с проблемой составления нужного мне выражения. Требуется подсказка Итак, мне нужно выделить текст, который находится внутри определённого набора символов. Например, мне нужно найти в документе все ссылки: ... $s1 = "<a href="; $s2 = ">"; $str = '<a href="http://www.mysite.net/script?searchtext=string&form_type=simple">My string</a>'; ... Как мне выделить из $str ссылку, то есть текст находящийся между строками $s1 и $s2 ? <?php $str = '<a href="http://www.mysite.net/script?searchtext=string&form_type=simple">My string</a>'; $link = explode("<a href=\"", $str); $link2 = explode("</a>", $link[1]); $link3 = explode("\">", $link2[0]); print "$link3[0]<br>"; ?> Так как ты хотел. |
Сообщ.
#24
,
|
|
|
link, эта тема про регулярки !
|
Сообщ.
#25
,
|
|
|
Понятно, просто проще через explode ну пох.
|
Сообщ.
#26
,
|
|
|
Если нужно найти нечто внутри границ, не включая самих границ, смотри в сторону look ahead и look behind assertions.
|