我需要一些正則表達式guru的幫助。與條件匹配的塊
我正在嘗試爲家庭項目製作一個小型配置系統,但爲此我覺得需要更多的正則表達式代碼,而不是我的正則表達式技巧。
我需要能夠根據條件和操作提取塊內的一些信息。舉一個例子。
action1 [condition1 condition2 !condition3] {
Line 1
Line 2
Line 3
}
條件存儲在由空格分隔的簡單變量中。我使用這些變量來創建用於從文件中提取塊信息的正則表達式。大多數,如果這工作正常,除了我不知道如何使「不匹配」的部分,這基本上意味着一個「單詞」是不可用的條件變量。
VAR1="condition1 condition2"
VAR2="condition1 condition2 condition3"
當與上述匹配時,它應該匹配VAR1而不是VAR2。
這是我迄今爲止
PARAMS="con1 con2 con3"
INPUT_PARAMS="[^!]\\?\\<$(echo $PARAMS | sed 's/ /\\>\\|[^!]\\?\\</g')\\>"
sed -n "/^$ACTION[ \t]*\(\[\($INPUT_PARAMS\)*\]\)\?[ \t]*{/,/}$/p" default.cfg | sed '/^[^{]\+{/d' | sed '/}/d'
不知道如何漂亮,這是的,但它的工作,除了不匹配。
編輯:
好吧,我會盡量詳細一點。
比方說,我有下面的文本/ config文件
,我有休耕條件來匹配
ARG1="con1 con2 con3"
ARG2="con1 con2"
ARG3="con1"
ARG4="con1 con4"
# Matching against ARG1 should print Line A, B, D and E
# Matching against ARG2 should print Line C, D and E
# Matching against ARG3 should print Line E
# Matching against ARG4 should print Line E
下面是使用正常的條件檢查類似例子1動作的一個java 。它給出了一個更好的主意,我想做
if (ARG2.contains("con1") && ARG2.contains("con2") && !ARG2.contains("con3")) {
// Print all lines in this block
}
我什麼都不懂。你想做什麼 ?檢查比賽並知道何時不匹配? – 2014-09-06 20:29:12
您正在使用錯誤的工具。 sed是在單行上進行簡單替換的正確工具,但對於任何其他文本操作,您應該使用awk。發佈一些清晰,準確的樣本輸入和預期的輸出以及對地圖的描述,我們可以爲您提供幫助。 – 2014-09-06 21:58:20
如果你實際解析的是CSS,你有沒有考慮過使用實際的CSS解析器? – tripleee 2014-09-07 10:29:39