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

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

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

 

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

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

тема: негативная опережающая проверка
 
 автор: maksimka2112   (23.12.2015 в 21:22)   письмо автору
 
 

Есть массив данных:
01
01.1
01.11
01.11.1
01.11.11
01.11.11.110
01.11.11.112
02
02.1
Возможно ли с помощью негативной опережающей проверки выбрать все элементы, кроме элементов формата: xx.xx.xx.xxx ??
Я пытался сделать как-то так, но не получилось:
(\d\d\.)+(?!(\.\d\d\d))

То есть моя логика такая:
1) выбрать все наборы типа 'xx.'
2) исключить справа набор типа '.xxx'

Объясните, почему у меня не получилось? Я неправильно понял негативную опережающую проверку?

  Ответить  
 
 автор: Deed   (26.12.2015 в 10:44)   письмо автору
 
   для: maksimka2112   (23.12.2015 в 21:22)
 

Какие проблемы?
 /(\d\d\.)+/

А вот это:
/(\d\d\.)+(?!\d{3})/

из 12.34.56.789 возьмет только первые две группы - 12.34.56.789 исключив 56. потому, что ПОСЛЕ нее идет \d{3} - 789

  Ответить  
 
 автор: Sfinks   (11.01.2016 в 20:41)   письмо автору
 
   для: maksimka2112   (23.12.2015 в 21:22)
 

Не получилось, потому что секция (\d\d\.) уже включает в себя точку. И для последнего (\.\d\d\d) точки уже не остается.
Читаю ваше выражение по русски:
- две цифры после которых следует точка повторяются 1 или более раз и после них не следует точки и трех цифр
Под это определение тут подходят:
01.
01.11.
Но ни одной строки полностью.
Решение выглядит примерно так:
/\d{2}(\.\d{1,2})*(?!\.\d{3})/

Читается так:
- две цифры, после которых ноль или более раз следует точка с одной или двумя цифрами, и после них нет точки с тремя цифрами
Примерно так. Может и посложнее как-то. А может и попроще =)

  Ответить  
Rambler's Top100
вверх

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