【【【求精简一个万恶的正则表达式】】】

Big_foolcat 2006-04-26 08:01:38
//这个表达式用于解析等号(=)两边的串,规则如下:
// 1、在输入串中等号(=)可以出现多次,其中第一次出现位置做为分界符,其它将视为结果串的一部分
// 2、输入串首尾可以出现多个空格或制表符,但不会视为结果串的一部分
// 3、串中不处理双引号,若出现双引号将被视为结果串的一部分
// 4、左、右串允许出现多个词/字(串中允许有空格或制表符,但首尾将被忽略),且支持中文
// 5、左串不允许为空串(仅含有空格或制表符将将视为空串)
// 6、右串可以为空串
// 7、井号键(#)为注释开始符,只允许出现在输入串首(串首空格、制表符不计)或第一个等号后
// 8、输入串有部分编码过的信息,其中会包含任意字符(所有非\0字符)
//
//表达式如下:
//
// boost::wregex re(
// L"^"
// L"[ \\t]*"
// L"([^ #=\\t\\n\\r]+|[^ #=\\t\\n\\r]+[^#=\\n\\r]*[^ #=\\t\\n\\r]+)" // 返回左串
// L"[ \\t]*"
// L"="
// L"[ \\t]*"
// L"([^ #\\t\\n\\r]*|[^ #\\t\\n\\r]+[^\\n\\r]*[^ #\\t\\n\\r]+)" // 返回右串
// L"(?:[ \\t]*(?:[#\\n\\r]+\\s*\\S*|[#\\n\\r]*))"
// L"[ \\t]*"
// L"$" );
//
//
//测试数据如下:
//
// input string regex_match wcmatch[1] wcmatch[2]
// --------------------------------------------------------------------------------------------------------------
// "a=" true "a" ""
// "ab=" true "ab" ""
// " \ta b c \t= \t" true "a b c" ""
// " \t中文 Hello world 中 文 ,。\t = \t" true "中文 Hello world 中 文 ,。" ""
// "\na=" false - -
// "a=b" true "a" "b"
// "a\n=" false - -
// "a=\n" true "a" ""
// "a= \n " true "a" ""
// "a=b \n " true "a" "b"
// "a= \n some" true "a" ""
// "a=b\n" true "a" "b"
// "a=\nb" true "a" ""
// "a= \ta b c\t\n\r" true "a" "a b c"
// "a= \ta b c\t\n\rsome" true "a" "a b c"
// "a==" true "a" "="
// "\"a==\"b" true "\"a" "=\"b"
// "=" false - -
// " \t=" false - -
// "#abc=" false - -
// " \t#abc=" false - -
// "a#bc=" false - -
// "a=#b" true "a" ""
// "a= # b" true "a" ""
// "a=b##" true "a" "b"
// "a=b#\n" true "a" "b"
// "a=b#\nsome" true "a" "b"
...全文
340 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnhgj 2006-04-27
  • 打赏
  • 举报
回复
头晕了。。
bombwang 2006-04-27
  • 打赏
  • 举报
回复
不会
帮顶一下吧
Could 2006-04-27
  • 打赏
  • 举报
回复
郑泽表达式本来就不容易看懂。
Big_foolcat 2006-04-27
  • 打赏
  • 举报
回复
up
fiftymetre 2006-04-27
  • 打赏
  • 举报
回复
不懂 顶一个
gold123d 2006-04-27
  • 打赏
  • 举报
回复
晕了,楼主干嘛弄这些来啊.
Big_foolcat 2006-04-26
  • 打赏
  • 举报
回复
up
Could 2006-04-26
  • 打赏
  • 举报
回复
不是很复杂,
因为你要处理的本来就是多行文本,
那样写已经够清晰了。
只见烟火飞扬 2006-04-26
  • 打赏
  • 举报
回复
不会,帮顶~~
Big_foolcat 2006-04-26
  • 打赏
  • 举报
回复
昨晚熬夜写的,现在困了,请大家帮忙精简一下吧 ~_~:
YFY 2006-04-26
  • 打赏
  • 举报
回复
这个表达式够复杂的。
Big_foolcat 2006-04-26
  • 打赏
  • 举报
回复
这个表达式偶是拿测试素材在单元测试里一点一点加出来的,加完无语了,希望能改得简单些(偶第一次用正则式,很多规矩不清楚)
逸学堂 2006-04-26
  • 打赏
  • 举报
回复
太负责了,偶都快晕了。
gjianpro 2006-04-26
  • 打赏
  • 举报
回复
学习
Big_foolcat 2006-04-26
  • 打赏
  • 举报
回复
就是需要简化才来发帖的呀,上上
sharpdew 2006-04-26
  • 打赏
  • 举报
回复
是不是就是一个相当于perl中的赋值表达式呀,你写的顾忌是忒复杂了,应该大大简化才对,嘻嘻
adintr 2006-04-26
  • 打赏
  • 举报
回复
正则表达式可读性这么差,还是这么流行啊,这就是 UNIX 的哲学?
Big_foolcat 2006-04-26
  • 打赏
  • 举报
回复
up

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧