Соглашение об именах регулярных выражений, заглядываний вперед и назад - PullRequest
1 голос
/ 25 марта 2010

Почему это противоречит интуиции?

/(?<!\d)\d{8}(?!\d)/, здесь (?<!\d) идет сначала , но называется lookbehind , (?!\d) далее , но называется lookahead, Все противоречит интуиции.

Зачем называть это так?

Ответы [ 4 ]

3 голосов
/ 25 марта 2010

Их имена основаны на том, что они делают, а не на том, как вы их используете в этом конкретном выражении.

Смотритель ищет совпадение в строке позади (слева от) текущей позиции.

Смотритель ищет совпадение в строке перед (справа) от текущей позиции.

3 голосов
/ 25 марта 2010

Поскольку механизм регулярных выражений потребляет символы от начала до конца.Таким образом, «впереди» - к концу строки, а «сзади» - к началу.

    ...xyz12345678abc...
behind --->---------- ahead

(?!\d) - это утверждение, что после * стоит десятичное число1005 *, поэтому механизм регулярных выражений должен проверять символы в направлении к концу строки, то есть упреждающий просмотр .

Похоже на оглядку.

1 голос
/ 25 марта 2010

Это нелогично, потому что нет единого мнения о том, идет ли время спереди назад или сзади вперед, и у вас просто другое мышление.

В английском мы говорим: «Оставь прошлое позади », но «прошлое» - это то, что происходит « перед » (передний план = передний).

0 голосов
/ 25 марта 2010

Это действительно просто.

ab

Теперь прочитайте символы слева направо.

a позади b;
b опережает a


Тем не менее, вы правы, что такого рода релятивизм может сбивать с толку. Например, в аймаранской культуре будущее уже позади; прошлое впереди .

...