2010-03-25 4 views
1

Почему это счетчик интуитивно понятен?Именование конвеции regex, lookahead и lookbehind

/(?<!\d)\d{8}(?!\d)/, здесь (?<!\d) приходит первого, но называется , 'назад (?!\d)следующий, но называется опережения .Вс противопоказана интуитивный.

В чем причина назвать его таким образом?

ответ

0

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

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

+0

Это самый приемлемый ответ! Спасибо! – user198729

+0

Но все равно очень странно назвать это так – user198729

3

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

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

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

Похож на внешний вид.

+0

Извините, но это, похоже, не объясняет, почему это должно быть так? – user198729

+0

@user: Потому что вы не идете назад. (http://en.wikipedia.org/wiki/Backward_running) – kennytm

+0

Но почему регулярное выражение выбирает идти назад в этом случае? Есть ли какая-то польза? – user198729

3

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

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

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

0

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

ab 

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

a находится за пределами b;
b впереди a


сказанного, вы правы, что эти виды релятивизма может сбивать с толку. Например, в культуре Аймарана, the future is behind; the past is ahead.