первый, вам нужно, чтобы избежать .
(«ничего» .
матчи, вы хотите \.
, чтобы соответствовать «») [странно - кто-то редактировал вопрос исправить]
секунду, просмотр вперед внешность впереди - ничего не потребляет. так что, даже если вы избежите .
, [_a-z0-9]+(?=\.|->)
всего «hints6» (а затем, глядя вперед, подтверждая, что символ следующий будет 44. после этого [_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» или «слово предшествует слово.», который будет выделить оба слова без выделения точки. они являются двумя отдельными совпадениями, но синтаксический маркер не заботится об этом (я полагаю).
Я использовал '[_a-z0-9] + (?: \. | ->) [_ a-z0-9] +', но он соответствует 'hints6.ai_flags', когда мне нужны только' hints6' и 'ai_flags ' –
см. Править. 1234556 –
Можно ли это сделать без группировки? Регулярное выражение, которое я использую, не предоставляет метод для вызова групп; поэтому я пытался использовать альтернативный метод. –