Regex - понять взгляд - PullRequest
0 голосов
/ 24 мая 2019

Я читаю эту статью , и у меня возникают некоторые трудности, чтобы понять это:

с учетом строки quit и регулярного выражения q(?=u)i почему регулярное выражение не совпадает?

двигатель сначала находит q, а затем заглядывает в будущее, чтобы увидеть, есть ли после q право u? Поскольку это позитивный взгляд, это приведет к позитивному утверждению, но тогда я не могу понять, что будет дальше.

Может быть какая-то подсказка (о взглядах):

They do not consume characters in the string, but only assert whether a match is possible or not. 

Кто-нибудь может помочь мне полностью понять это?

Большое спасибо!

1 Ответ

1 голос
/ 24 мая 2019

Это потому, что поисковый запрос нацелен на позицию между символами, а не на сам символ.

Если мы читаем ваше регулярное выражение как 3 шага:

  1. Соответствует символу q
  2. Убедитесь, что следующим символом является u (он есть) - это соответствует позиции, где u является следующим символом
  3. После просмотра убедитесь, что следующий символ являетсяi - это не так, потому что вы все еще находитесь в позиции, где следующий символ является u.

Обозначения обычно используются для поиска начала / конца совпадения с подстановочными знакамиНапример, если вы хотите сопоставить ТОЛЬКО часть слова после qu, вы можете использовать оглядку назад, чтобы найти начало захвата:

(?<=\bqu)

Затем перехватите любой символ доконец слова:

(?<=\bqu).*?\b

Это будет соответствовать таким вещам, как:

quit => it
question => estion
quagmire => agmire

Обратите внимание, взгляд позади обозначил НАЧАЛО матча, без необходимости знать, какой первый символматча будет.

...