Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

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

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как найти максимально маленькие фрагменты между A и B?
 
 автор: kvecxjo   (16.12.2005 в 14:02)   письмо автору
 
 

Как записать такое условие?
Найти максимально маленькие фрагменты между A и B.
Например, найти выделенное:
xxAxxAxxxBAxxAxxxBxxxBx
Ну, и, грубо говоря, заменить на D:
xxAxxADBAxxADBxxxBx

Вроде тоже несложно должно быть, но не получается...

Такое условие:
(?<=A)(.+?)(?=B)
оказывается слишком жадным и выхватывает более крупные фрагменты:
xxAxxAxxxBAxxAxxxBxxxBx
с таким результатом:
xxADBADBxxxBx
Вероятно, это связано с тем, что выражение парсится слева направо без предварительного анализа и без возвратов?

Как быть?

   
 
 автор: Евгений Петров   (16.12.2005 в 16:26)   письмо автору
 
   для: kvecxjo   (16.12.2005 в 14:02)
 

Отключите жадность при помощи U

   
 
 автор: kvecxjo   (17.12.2005 в 07:47)   письмо автору
 
   для: Евгений Петров   (16.12.2005 в 16:26)
 

А Вы пробовали? Жадность уже отключена знаком "?". Я, разумеется, попробовал, ничего не изменилось.

Нужно, а думаю, написать выражение типа:
(?<=A)(что угодно но не A и не B)(?=B)

P.S. A, B и С могут быть последовательностями символов!

Даже пример ради этого заменю:
Например, найти выделенное:
xxA1xxA1xxxB1A1xxA1xxxB1xxxB1x
Ну, и, грубо говоря, заменить на D:
xxA1xxA1DB1A1xxA1DB1xxxB1x

   
Rambler's Top100
вверх

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