Regex позитивный взгляд - PullRequest
1 голос
/ 07 марта 2012

Почему этот позитивный взгляд не соответствует тексту, выделенному жирным шрифтом? (не. и не ->)

[_a-z0-9]+(?=\.|->)[_a-z0-9]+
подсказки6 . ai_flags = 0; // комментарий hints.ai_flags
подсказки6 . ai_family = AF_UNSPEC;
int newsocket = socket ( результат -> ai_family , результат -> ai_socktype , результат -> ai_protocol );

1 Ответ

5 голосов
/ 07 марта 2012

во-первых, вам нужно экранировать . (. соответствует «чему угодно», вы хотите, чтобы \. соответствовало «.») [Странно - кто-то редактировал вопрос, чтобы это исправить]

во-вторых, взгляд в будущее - он ничего не потребляет. поэтому, даже если вы не укажете, ., [_a-z0-9]+(?=\.|->) потребляет только "hints6" (и затем, заглядывая в будущее, подтвердите, что символ следующий будет ".") , после этого [_a-z0-9]+ не соответствует ".".

Я действительно не понимаю, что вы пытаетесь сделать. насколько я понимаю, [_a-z0-9]+(?:\.|->)[_a-z0-9]+ будет делать то, что вы хотите, без какой-либо перспективы ((?:...) - это группа, которая не привязывается к результатам).

В общем, вам не нужно много заглядывать вперед, потому что вы можете просто соответствовать. он используется в основном, когда вы хотите сопоставить группу, но по какой-то (странной) причине необходимо заранее проверить конкретный случай.

[edit:], если вы просто хотите захватить два слова, используйте ([_a-z0-9]+)(?:\.|->)([_a-z0-9]+) (обратите внимание, что будут захватывать две группы, по одной для каждого слова).

[edit2:] если это для подсветки синтаксиса, то я думаю, что вы могли бы пойти с чем-то, что подсвечивает или слово. это проще показать, чем объяснить:

(?:[_a-z0-9]+(?=(?:\.|->)[_a-z0-9]+)|(?<=[_a-z0-9]+(?:\.|->))[_a-z0-9]+)

, который выделит либо «слово, сопровождаемое .word», либо «слово, которому предшествует слово.», Что выделит оба слова без выделения точки. это два разных соответствия, но подсветка синтаксиса не заботится об этом (я полагаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...