如何使用lex在html标记内打印文本

时间:2018-08-25 18:03:24

标签: html css c lex

 %{ 
 %}
%% 
"<"[^>]*> {printf("%s\n", yytext); }  
. ;
%%     

int yywrap(){} 
int main(int argc, char*argv[]) 
{ 
extern FILE *yyin = fopen("tags.txt","r");  
yylex();  
return 0; 
}

这将打印出所有标签...我如何在标签内打印文本。 我用了“>” [^>] * <,但这没用...

2 个答案:

答案 0 :(得分:1)

您的lex文件:

  • 打印标签
  • 忽略其他一切

如果我理解正确,您希望它

  • 忽略标签
  • 打印其他所有内容。

这表明您应该尝试交换当前文件中的操作。

答案 1 :(得分:0)

如果要在标签之间添加文本,则需要忽略标签并获取所有其他未标记标签开头的文本:

TAG               <[^>]*>
ALLBUTSTARTOFTAG  [^<]*

%%

{TAG}              ;  // do nothing, i.e. ignore a tag
{ALLBUTSTARTOFTAG} {printf("%s\n", yytext); }  // print the text until a tag starts

%%

然后,以下功能

int main(){
    char string[] = "before any tag<html>between html and body<body>body content</body>between body end and html end</html>after html end";
    YY_BUFFER_STATE buffer = yy_scan_string(string);
    yyparse();
    yy_delete_buffer(buffer);
    return 0;
}

打印:

before any tag
between html and body
body content
between body end and html end
after html end