![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Dup13x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
Подскажите. У меня есть какой-то шаблон например token, в строке встречается это один и более раз. Как мне вытащить содержимое между этими двумя шаблонами.
token1 foo token2 bar Мне нужно получить foo и bar А у меня получается поиск только по шаблону token. Не понятно что отвечает за взятие символов до следующего совпадения((( |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
любое число — \d
любое количество идущих подряд чисел — \d+ по описанию не понятно, почему ты должен в результате получить и bar тоже — он же не между двумя token\d+ находится |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 1 Всего: 55 |
Dup13x, за отвечают скобки, а за отвечает квантификатор ленивой выборки (человеческим языком - знак вопроса).
Пара примеров, от менее до более универсальных:
Это сообщение отредактировал(а) Arantir - 9.3.2013, 14:48 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Dup13x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
Ничего у меня не получается. Напишу то что мне нужно сделать
Есть некоторые наборы строк(привожу 2 примера) Научный руководитель: Доктор биологических(здесь может быть что угодно) наук, профессор Фамилия Имя Отчество Официальные оппоненты: Доктор биологических наук, профессор Фамилия1 Имя1 Отчество1 Доктор биологических наук, профессор Фамилия2 Имя2 Отчество2 Так вот надо вытащить: 1 - Доктор(или кандидат) биологических(здесь может быть что угодно) наук 2 - профессор 3 - Фамилия Имя Отчество Соответственно и для второй строки нужно тоже самое, только для двух людей. Не могу сообразить какую либо общую функцию. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 1 Всего: 55 |
Зачем вам вытаскивать слово "профессор"?
Приведите какой-то более конкретный пример (с любыми именами, но человеческими) и массив данных, которые вы должны получить из этого примера в результате применения регулярного выражения. А то непонято, то ли везде "Доктор биологических наук", то ли вам надо строку после "Научный руководитель:". А так же, надо ли вам только первое ФИО или каждое. И что за "Фамилия1 Имя1 Отчество1 Доктор биологических наук" без разделительный знаков. Поменьше абстрагируйтесь в примерах. Это сообщение отредактировал(а) Arantir - 10.3.2013, 20:36 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Dup13x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
Научный руководитель: Доктор биологических наук, профессор Каываа Нвыаывя Абропроповна
Официальные оппоненты: Доктор биологических наук, профессор Лфывако Маываина Влавыаовна Доктор биологических наук, профессор Меываов Генывадий Февыаович Научный руководитель: Доктор биологических наук, профессор С23432ев Н23423лай Николаевич Официальные оппоненты: Доктор медицинских наук, доцент Ос234шая Лю324ла Бо32423на Доктор биологических наук, профессор С23423ов 324лий Га32423лович $degree = "/(доктор|кандидат)/i"; $title = "/(профессор|доцент|Старший научный сотрудник|Младший научный сотрудник|Академик РАН|Академик РАМН|Академик РАСХН|Академик РАО|Академик РААСН|Академик РАХ|Член-корреспондент РАН|Член-корреспондент РАМН|Член-корреспондент РАСХН|Член-корреспондент РАО|Член-корреспондент РААСН)/i"; |
|||
|
||||
Arantir |
|
||||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 1 Всего: 55 |
Самое универсальное, что смог придумать:
http://regexr.com?3434b Если "Доктор" может начинаться с прописной буквы, но придется сделать так:
На выходе из preg_match_all() вы получите массив с массивами групп. Первый индекс + 1 — это группа в паттернте, второй — порядковый номер доктора/кандидата по мере поиска в строках.
Это сообщение отредактировал(а) Arantir - 11.3.2013, 19:52 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||||
|
|||||||
Dup13x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
Спасибо, что натолкнули на идею, я лучше понял ленивые вычисления.
наверное мне нужно что-то типа такого
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |