我需要一些正则表达式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