我试图匹配以下短语:
<svg/onload="alert(1);">
我需要令牌像:
'<svg', 'onload="alert(1);", '>'
所以基本上我需要跳过/
部分中的<svg/onload
。但此处不允许使用skip
短语:
Attribute
: ('/' -> skip) Identifier '=' StringLiteral?
;
错误是
error(133): HTML.g4:35:11: ->command in lexer rule Attribute must be last element of single outermost alt
有什么想法吗?
答案 0 :(得分:1)
错误消息几乎可以告诉您问题所在。 skip
命令必须位于规则的末尾。您不能跳过中间令牌,只能跳过整个规则。
然而,我想知道你为什么要跳过斜线。为什么不让lexer扫描所有内容(无论如何),然后忽略你不需要的令牌?另外,我不会使用词法分析器规则,而是使用解析器规则,以允许元素之间的任意空格。
答案 1 :(得分:-1)
尝试lexer的setText(getText().replace("/", ""))
或任何其他匹配的字符串操作