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
Форумы портала PHP.SU :: Версия для печати :: Последнее совпадение($+)
Форумы портала PHP.SU » PHP » Регулярные выражения » Последнее совпадение($+)

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

1. DedMorozzz - 25 Августа, 2010 - 11:37:58 - перейти к сообщению
Подскажите, что я делаю не так. Только что прочёл тут про такую конструкцию как "&+", которая указывает на последнее совпадение. Решив проверить необходимого результат не достиг.
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = 'abcc aaa ax aaa cc';
  3. $a=preg_replace ('#.*?(aaa).*#', '$1', $a);
  4. echo $a;//aaa
  5.  

т.е. выводит что и дОлжно, при попытке указать так, как написано в примере, а именно:
Цитата:

$+ - обозначает последнее совпадение
$& - все совпадение
$` - все до совпадения
$' - все после совпадения
, т.е.
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = 'abcc aaa ax aaa cc';
  3. $a=preg_replace ('#.*?(aaa).*#', '$+', $a);
  4. echo $a;//$+
  5.  

т.е. не посчитало спец символом, а заменило на обычный текст. Экранирование - не помогает. ЧЯДНТ?
2. Uchkuma - 25 Августа, 2010 - 12:55:32 - перейти к сообщению
DedMorozzz, статья, на которую вы ссылаетесь, относится к регулярным выражениям в целом безотносительно к php конкретно. Т.е. синтаксис и принцип PERL-совместимых регулярных выражений в целом одинаков, однако в php имеет небольшие отличия. Возможно это зависит от сборки и версии php. Например в php регексах есть просмотр не только вперед, но и назад, чего в данной статье не указано. И наоборот отсутствуют переменные $+ и $&. Ссылка на подмаску указывается $x, где 'x' - номер подмаски - также как у вас в первом листинге.
(Добавление)
В этой статье описаны конструкции, поддерживаемые в php:
Приложение № 3 - О регулярных выражениях[dot]
3. DedMorozzz - 25 Августа, 2010 - 13:07:09 - перейти к сообщению
Uchkuma пишет:
DedMorozzz, статья, на которую вы ссылаетесь, относится к регулярным выражениям в целом безотносительно к php конкретно. Т.е. синтаксис и принцип PERL-совместимых регулярных выражений в целом одинаков, однако в php имеет небольшие отличия. Возможно это зависит от сборки и версии php. Например в php регексах есть просмотр не только вперед, но и назад, чего в данной статье не указано. И наоборот отсутствуют переменные $+ и $&. Ссылка на подмаску указывается $x, где 'x' - номер подмаски - также как у вас в первом листинге.
(Добавление)
В этой статье описаны конструкции, поддерживаемые в php:
Приложение № 3 - О регулярных выражениях[dot]

Почему я и зацепился за это. Ибо я с синтаксисом регулярных выражений, в пхп, знаком на 5. Но этого "метода" я не видел и никогда, за всю практику не сталкивался. Решил проверить и не увидал необходимого результата... Спец зарегился и спросил.
На форуме(тоже пхп), на котором общаюсь спрашивать не стал. Ибо такое обозначение лишь тут увидел. Вот и ожидал, что увижу ответ.
Насчёт "без привязки к ПХП" - дык сайт ПХП.СУ Улыбка
Версия пыха - 5.3.1
Т.е. все нововведения имеют место быть.

ЗЫ: В целом ответ ясен. Этот синтаксис не для ПХП.
4. JustUserR - 26 Августа, 2010 - 09:45:03 - перейти к сообщению
DedMorozzz пишет:
Т.е. не посчитало спец символом, а заменило на обычный текст
Несмотря на то что PHP поддерживает регулярные выражения с общим синтаксисом PCRE но при этом их функциональность может в достаточной степени отличаться - дело в том в PHP поисковые шаблоны и все их составляющие являются обычными строками а не частью синтаксиса языка и по этой причине многие опции в них отсутствуют - в частности в Perl при обработке регуляных выражений все найденные вхождения и ссылки сохраняются в виде реальный локальный переменных с именами такими как $3 или $& которые можно использовать и вне шаблона после окончания его обработки

 

Powered by ExBB FM 1.0 RC1