Показать сообщение отдельно
  #10 (permalink)  
Старый 23.07.2009, 18:59
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от e1f
Если квантификатор "нежадный", то движок хватает первое попавшееся совпадение и радостный топает дальше
А как ему определить, сколько символов в этом первом попавшемся совпадении?

Вот такая строка: '0123456789012345678901234567890123456789012345678 9012345678901234567890123456789mail@mail.ru'

С жадностью: /[^a-z]*[^0-9]+/

Здесь что бы регулярке сдвинуться на один символ вправо нужно сделать всего одно действие: примерить этот символ к [^a-z]

Без жадности: /[^a-z]*?[^0-9]+/

Что бы сдвинуться на один символ вправо нужно сначала примерить символ к [^0-9] и если не подходит, то тогда уже примерять к [^a-z]. Т. е. два действия. Пока тормозит всего в 2 раза сильней, и теперь заменяем в обоих случаях [^0-9]+ на что-нибудь посложней, вроде того:
RegExp.eMail = '[0-9a-z][.\\-\\w]{20}@(?:[0-9a-z][\\-0-9a-z]*[0-9a-z]\\.)+[a-z]{2,6}';

Регулярка с жадностью сначала вберет в себя все цифры и далее !один! раз примерит RegExp.eMail к 'mail@mail.ru' .
Регулярка без жадности будет примерять RegExp.eMail много-много раз и это примирение уже довольно тяжелое.

зы: если кто-нибудь попросит объяснить сначала, то мне придется сделать себе харакири.
Ответить с цитированием