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 :: не работает поис с подмаской в регулярке
строка там 'as34sdf34'
регулярка '/([0-9]{2,3}).\1/'
теоретическа как там написано должно было найти '34'
хотя смущает единичкая точка
должно быть хотя б вот так '/([0-9]{2,3}).{3}\1/' или '/([0-9]{2,3}).+?\1/'
но не суть важно так как ни один из трех вариантов не срабатывает
все выдают пустоту
хотя если убрать "\1" то все чет находят, а хотелось бы с подмасками
проверял на php 5.3, 5.2 результат одинаковый
так вот вопрос подмаски отменили или глюк в чем то другом?
OrmaJever
Отправлено: 08 Июня, 2012 - 23:26:14
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Не срабатывает она в двойных кавычках потому что обратный слеш в двойных кавычках как спец символ (\n \r \t и т.д идут отсюда), либо использовать одинарные либо экранизировать \\1. Насчёт точки там навеное ошибка, и правда точка обозначает один символ, а там их 3, поэтому для работы после точки нужно поставить плюс.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DlTA
Отправлено: 08 Июня, 2012 - 23:50:37
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
на данном примере смена кавычек сработала
хотя не совсем понимаю логики
к примеру текст: "as34.34"
регулярка: "/([0-9]+)\.\\1/" // срабатывает.
почему тогда перед точкой одинарный слеш, без экранирующего ?
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DlTA пишет:
почему тогда перед точкой одинарный слеш, без экранирующего ?
Потому что в контексте пыха внутри двойных кавычек точка не является спецсимволом как n, t, r и прочие.
А еще вместо экранирования подмаски можно использовать знак доллара, а т.к. опять же даже в двойных кавычках имя переменной не может начинаться с числа (номер подмаски), то и эта конструкция воспринимается как строка, которая уже и передается в pcre.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.