Я пишу кисть для Подсветки синтаксиса Алекса Горбачева, чтобы подсветить код Smalltalk. Теперь рассмотрим следующий код Smalltalk:
aCollection do: [ :each | each shout ]
Я хочу найти аргумент блока «: каждый», а затем сопоставлять «каждый» каждый раз, когда это происходит впоследствии (для простоты, скажем, каждое вхождение, а не только в скобках).
Обратите внимание, что аргумент может иметь любое имя, например ": MyArg"
.
Моя попытка сопоставить ": каждый":
\:([\d\w]+)
Кажется, это работает. Проблема для меня, чтобы соответствовать вхождениям "каждого". Я думал, что-то вроде этого может работать:
\:([\d\w]+)|\1
Но правая часть чередования выглядит как независимое выражение, поэтому обратная ссылка не работает.
Можно ли даже выполнить то, что я хочу, в одном выражении? Или мне нужно использовать обратную ссылку во втором выражении (через другой вызов функции)?