Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохраняющие круглые скобки в регулярных выражениях, как получить доступ к сохранненым рез. 
:(
    Опции темы
XAKEPEHOK
  Дата 14.10.2011, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.10.2006
Где: Matrix

Репутация: нет
Всего: 0



Добрый день!
Ребят, подскажите пожалуйста, до меня не доходит...
Изучаю регулярные выражения по вот этому мануалу, там есть раздел про сохраняющие круглые скобки
Цитата

Если мы просто хотим проверить строку на соответствие условию совпадения, то условие поиска будет вот таким: [a-z]{5}[1-8]{4} но нам надо запомнить цифры, поэтому добавляем инструкцию запоминания: [a-z]{5}([1-8]{4})

Как видите, то, что надо запомнить, выделено круглыми скобками. Внутри функции, которая будет выполнять операцию со строкой при помощи вышеприведенного условия, совпадение будет запоминаться в специальных переменных, в PHP к ней можно обращаться через \1 в Perl - $1. В одном условии поиска может быть несколько инструкций запоминания: ([a-z]{5})([1-8]{4}) - проверит строку на совпадение с условием, в случае удачного совпадения, запомнит пять букв в \1 ($1), четыре цифры в \2 ($2). Если обратиться к переменной \0, то окажется, что в ней хранится вся совпавшая строка, которая была описана условием.


Так вот я не пойму, каким образом обращаться к этим переменным \1, \2 ....
Можете привести пример кода?
PM ICQ   Вверх
baldina
Дата 14.10.2011, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(XAKEPEHOK @  14.10.2011,  09:52 Найти цитируемый пост)
 каким образом обращаться к этим переменным

это касается замены.
http://php.net/manual/ru/function.preg-replace.php

Добавлено через 5 минут и 59 секунд
конечно, это упрощенно и не совсем верно. 
на самом деле результатом работы preg_match являются в т.ч. строки-совпадения. вот они то и зависят от группировки (скобок). они же применяются для замены.

наглядно увидеть как это работает можно здесь.
PM MAIL   Вверх
$дмитрий
Дата 14.10.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



Цитата

Можете привести пример кода? 

Код

echo preg_replace("#p(h)p#", "\\1tml", "php");


Добавлено через 14 минут и 1 секунду
А можно обращаться в самом шаблоне
Код

echo preg_replace("#(p)(h)\\1#", "$2tml", "php");

PM MAIL   Вверх
XAKEPEHOK
Дата 14.10.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.10.2006
Где: Matrix

Репутация: нет
Всего: 0



baldina, спасибо!

$дмитрий, большое спасибо! Разобрался.

PM ICQ   Вверх
XAKEPEHOK
  Дата 15.10.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.10.2006
Где: Matrix

Репутация: нет
Всего: 0



Не буду создавать отдельный топик, спрошу здесь. Уже голову сломал, не пойму что не так.

Код

$html='<h1 id="title"><b class="indigo">Пользователь</b>Иванов Иван</h1>';
preg_match('/(?<=<\/b>)[.]*(?=<\/h1>)/i', $html, $matches);
print_r($matches); 


Возвращает вместо имени пользователя пустой массив Array ( ). Что я делаю не так?
PM ICQ   Вверх
$дмитрий
Дата 15.10.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



Код

#</b>(.+?)</h1>#i

PM MAIL   Вверх
XAKEPEHOK
  Дата 15.10.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.10.2006
Где: Matrix

Репутация: нет
Всего: 0



$дмитрий, спасибо, работает. Но это все же другой вариант. Почему не работают ретроспективная и опережающая проверки? Я делал по статье отсюда. В чем у меня была ошибка?
PM ICQ   Вверх
Evghenusi
Дата 15.10.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



Цитата(XAKEPEHOK @  15.10.2011,  14:07 Найти цитируемый пост)
Что я делаю не так?

точку в квадратные скобки брать не надо
Код
preg_match('/(?<=<\/b>).*(?=<\/h1>)/i', $html, $matches);

PM WWW   Вверх
XAKEPEHOK
Дата 15.10.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.10.2006
Где: Matrix

Репутация: нет
Всего: 0



Evghenusi,  smile спасибо!
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.