您好我在这里有一个示例CDATA
<![CDATA[asd[f]]]>
和
<tag1><![CDATA[asd[f]]]></tag1><tag2><![CDATA[asd[f]]]></tag2>
我的CDATA正则表达式无法识别此
"<![CDATA["([^\]]|"]"[^\]]|"]]"[^>])*"]]>"
这也不起作用
"<![CDATA["[^\]]*[\]]{2,}([^\]>][^\]]*[\]]{2,})*">"
有人请给我<![CDATA[asd[f]]]>
的正则表达式,我需要在Lex / Flex中使用它
:我已经回答了这个问题,请对我的回答进行投票,谢谢。
答案 0 :(得分:7)
答案 1 :(得分:3)
答案 2 :(得分:2)
这是解决方案。我们需要使用START STATE的原因是,<!CDATA[
和]]>
之间的任何内容都无法与其他REGEX匹配。
%option noyywrap
%x CDATA
%%
"<![CDATA[" { BEGIN CDATA; printf("Entering CDATA\n"); }
<CDATA>([^\]]|\n)*|. { printf("In CDATA: %s\n", yytext); }
<CDATA>"]]>" {
printf("End of CDATA\n");
BEGIN INITIAL;
}
%%
main()
{
yylex();
}
答案 3 :(得分:0)
我相信this other SO answer可能会有所帮助,即使它们正在抓取HTML内容并且是.NET。
在同一个问题中,还有其他各种选择可以获取CDATA。
<!\[CDATA\[(.*?)\]\]>
匹配:
<![CDATA[asd[f]]]>
检索:
asd[f]
根据FlexRegEx无论如何。
答案 4 :(得分:0)
答案 5 :(得分:0)
<!\[CDATA\[\s*(?:.(?<!\]\]>)\s*)*\]\]>
以前的答案刚刚修改