Как напечатать текст внутри HTML-тега, используя lex - PullRequest
0 голосов
/ 25 августа 2018
 %{ 
 %}
%% 
"<"[^>]*> {printf("%s\n", yytext); }  
. ;
%%     

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

Это распечатывает все теги ... как мне напечатать текст внутри тегов.я использовал ">" [^>] * <но это не сработало ... </p>

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Если вы хотите, чтобы текст между тегами, вам нужно игнорировать теги и захватить весь другой текст, который не отмечает начало тега:

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
0 голосов
/ 25 августа 2018

Ваш файл lex:

  • Печатает теги
  • Игнорирует все остальное

Если я правильно понимаю, вы хотите, чтобы он

  • Игнорировать теги
  • Распечатать все остальное.

Это говорит о том, что вам следует попробовать поменять действия в текущем файле.

...