首页 > 解决方案 > 正则表达式设置字符串文字的最大长度

问题描述

我想弄清楚如何在正则表达式中设置最大长度。我的目标是将字符串文字的正则表达式设置为最大长度 80。

如果您需要,这是我的表达:

["]([^"\\]|\\(.|\n))*["]|[']([^'\\]|\\(.|\n))*['] 

我尝试在表达式的前面和结尾都添加 {0,80},但要么所有字符串都分解成更小的标识符,要么到目前为止都没有。

在此先感谢您的帮助!

编辑:

这是对我要完成的工作的更好解释。鉴于“此字符串长度超过 80 个字符”,当通过 flex 运行而不是像这样列出时:

行:1,词位:|此字符串长度超过 80 个字符|,长度:81,标记 4003

我需要像这样分解它:

行:1,词位:|THIS|,长度:1,标记 6000

行:1,词位:|STRING|,长度:1,标记 6000

行:1,词位:|IS|,长度:1,标记 6000

行:1,词位:|OVER|,长度:1,标记 6000

行:1,词位:|80|,长度:1,标记 6000

行:1,词位:|CHARACTERS|,长度:1,标记 6000

行:1,词位:|LONG|,长度:1,标记 6000

虽然字符串“此字符串不超过 80 个字符长”将显示为:

行:1,词位:|此字符串长度不超过 80 个字符|,长度:50,标记:4003

标签: c++regexlexlexical-analysis

解决方案


如果您在内部使用正则表达式flex,并且需要监视其长度,最简单的方法是查看保存在yylex(或类似)中的匹配字符串:

["]([^"\\]|\\(.|\n))*["]|[']([^'\\]|\\(.|\n))*[']    { if (strlen(yylex) > 82) { ... } }

我曾经82占两个双引号字符'"'。如果这不是您的设置,请在评论中告诉我,我将删除我的答案(无需投反对票:))


推荐阅读