Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: не работает поис с подмаской в регулярке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: \1 и т.п. не работает
DlTA
Отправлено: 08 Июня, 2012 - 23:17:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




берем урок http://www.php.su/lessons/?lesson_17

строка там 'as34sdf34'
регулярка '/([0-9]{2,3}).\1/'
теоретическа как там написано должно было найти '34'
хотя смущает единичкая точка
должно быть хотя б вот так '/([0-9]{2,3}).{3}\1/' или '/([0-9]{2,3}).+?\1/'
но не суть важно так как ни один из трех вариантов не срабатывает
все выдают пустоту
хотя если убрать "\1" то все чет находят, а хотелось бы с подмасками
проверял на php 5.3, 5.2 результат одинаковый

так вот вопрос подмаски отменили или глюк в чем то другом?
 
 Top
OrmaJever
Отправлено: 08 Июня, 2012 - 23:26:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Не срабатывает она в двойных кавычках потому что обратный слеш в двойных кавычках как спец символ (\n \r \t и т.д идут отсюда), либо использовать одинарные либо экранизировать \\1. Насчёт точки там навеное ошибка, и правда точка обозначает один символ, а там их 3, поэтому для работы после точки нужно поставить плюс.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 08 Июня, 2012 - 23:50:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




на данном примере смена кавычек сработала
хотя не совсем понимаю логики
к примеру текст: "as34.34"
регулярка: "/([0-9]+)\.\\1/" // срабатывает.
почему тогда перед точкой одинарный слеш, без экранирующего ?

(Отредактировано автором: 08 Июня, 2012 - 23:50:54)

 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июня, 2012 - 23:59:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DlTA пишет:
почему тогда перед точкой одинарный слеш, без экранирующего ?
Потому что в контексте пыха внутри двойных кавычек точка не является спецсимволом как n, t, r и прочие.
А еще вместо экранирования подмаски можно использовать знак доллара, а т.к. опять же даже в двойных кавычках имя переменной не может начинаться с числа (номер подмаски), то и эта конструкция воспринимается как строка, которая уже и передается в pcre.
 
 Top
DlTA
Отправлено: 09 Июня, 2012 - 00:16:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




кажись догнал, типа если в двойных кавычках запись типа \1 и т.п. это интерпритируется как код символа
-. ◙♀♂♪♫☼►◄↕‼¶§▬↨↑↓→

(Отредактировано автором: 09 Июня, 2012 - 00:17:25)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB