Awk给了我以下错误:
awk: illegal primary in regular expression (?<=\>)(.*?)(?=\<) at <=\>)(.*?)(?=\<)
source line number 10 source file transpile.awk
context is
match($0, >>> /(?<=\>)(.*?)(?=\<)/) <<<
但 是“非法主要”?
答案 0 :(得分:1)
如果您查看awk
source code,则可以看到非法主要是一个默认的FATAL
错误,当时没有任何案例正则表达式令牌匹配。它不是语法错误。
以下是来自awk(剥离)的b.c
文件的具体代码,
case NCCL:
np = op2(NCCL, NIL, (Node *) cclenter((char *) rlxstr));
rtok = relex();
return (unary(np));
case '^':
rtok = relex();
return (unary(op2(CHAR, NIL, itonp(HAT))));
case '$':
rtok = relex();
return (unary(op2(CHAR, NIL, NIL)));
case '(':
rtok = relex();
if (rtok == ')') { /* special pleading for () */
rtok = relex();
return unary(op2(CCL, NIL, (Node *) tostring("")));
}
np = regexp();
if (rtok == ')') {
rtok = relex();
return (unary(np));
}
else
FATAL("syntax error in regular expression %s at %s", lastre, prestr);
default:
FATAL("illegal primary in regular expression %s at %s", lastre, prestr);
这段代码也可以在github上找到,
https://github.com/onetrueawk/awk/blob/master/b.c
在您的具体情况下,原因是因为awk不支持Lookarounds,即Lookahead:(?=...), (?!...)
和Lookbehind:(?<=...), (?<!...)
。
希望这有帮助
答案 1 :(得分:1)
用awk的说法,“主要”是正则表达式的基本单位。
正则表达式由(1个或多个)分支的替代组成。每个分支由(0或更多)原色的串联组成。
主要是普通字符(例如a
),或转义的特殊字符(例如\*
),或字符类([...]
)或点({ {1}})或锚点(.
或^
)或带括号的子表达式($
)。其中大多数也可以有量词((...)
,?
,+
)。
你的正则表达式的问题是*
首先解析为(?<=\>)
,它启动一个子组。接下来的项目需要是主要的。 (
不是有效的主要内容,因此您会收到错误。
Awk不支持前瞻或后视。