Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как проверить символ, который уже попал в предыдущее совпадение?

Сообщения:  [1-3] 

 
 автор: .heed   (21.02.2013 в 00:06)
 
   для: dima_dima   (20.02.2013 в 16:40)
 

... или так
<xmp><?php
$txt = '%1%2%%3%%%4%5';
preg_match_all('#(?<!%)(?:%%)*(%\d+)#', $txt, $o);
print_r($o);

  Ответить  
 
 автор: .heed   (21.02.2013 в 00:00)
 
   для: dima_dima   (20.02.2013 в 16:40)
 

> На Java оно не работает т.к. длина обратной проверки не определена
непонятно зачем тогда там (?<!^|[^%])
может быть так будет работать
<xmp><?php
$txt 
'%1%2%%3%%%4%5';
preg_match_all('#(?<!%)%\d+#'$txt$o);
print_r($o);

  Ответить  
 
 автор: dima_dima   (20.02.2013 в 16:40)   письмо автору
 
 

Всем привет!

Упрощённо задача сводится к тому, чтобы из строки вычленить все цифры с предшествующим процентом, при условии, что процентов перед ней нечетное количество.
Т.е. для строки:
%1%2%%3%%%4%5
Результат должен быть
%1
%2
%4
%5

%3 не попадает т.к. перед цифрой3 чётное число процентов.

Сперва подобрал такое выражение:
 (?<!(?:^|[^%])(?:%%)*%)(%[12345])

Работало отлично, пока не попробовал его на Java. На Java оно не работает т.к. длина обратной проверки не определена (количество повторений %% любое (*))

Сейчас пробую переделать на выражение без обратной проверки.
Получилось пока так:
(^|[^%]|[^%](%%)+)(%[12345])


т.е. выбрать % с последующей цифрой, если перед ним либо начало строки, либо не %, либо чётное число процентов.

Проблема в том, что в строке %1%2%%3%%%4%5 мы находим первое совпадение %1, а вот %2 не удовлетворяет выражению. Подозреваю, что это происходит потому, что символ, который стоит перед %2 (т.е. символ 1) уже вошёл в предыдущее совпадение. И что сейчас стоит перед %2 не понятно.

Собственно вопрос: как быть в таком случае? Как сравнить с символом, который уже вошёл в предыдущее совпадение? И что там за символ стоит?

Спасибо.

  Ответить  

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования