我試圖檢測一個Makefile中的行是否是「規則」的開始。規則的語法爲<rule-name> : <rule-prerequisities>
。那麼,容易吧?我只向前看一個冒號:正則表達式冒號,但忽略替換
(?=[^:]+:(?!=))
負前瞻是有變量賦值來區分。他們可以有形式FOO := foo
。
不過,現在我也有這樣的事情:
$(FOO:.c=.o) : baz
這裏變量FOO
進行評估,但每.c
發生替換.o
。現在它會檢測到這是一條規則,但是以「錯誤」的方式。
問題是由這一行進一步加劇:
ifneq ($(words $(subst :, ,$(CURDIR))), 1)
這裏,先行相匹配,因爲它找到不跟一個冒號等號。
基本上,我需要做的是我需要向前看冒號,但忽略變量替換內的任何內容。
TL; DR:我如何向前看冒號但忽略變量替換?
regex101 link here,我想匹配除最後三行外的所有內容。
一個非常簡單的解決方案可能是這樣的一些版本:':(?!=)(?!。*?\))''。看看[在regex101](https://regex101.com/r/ZZRfbm/1)。它只是檢查一個冒號,後面跟着一個等號,後面跟着一個關閉的括號。 – ClasG
這不適用於類似'$(EXECUTABLE):$(OBJECTS)' – rwols
TL; DR:使用正確的解析器而不是RegEx。 –