请求验证Awk正则引擎括号表达式特性的三个假设
关于Awk ERE括号表达式解析的测试请求
我正在实现一个健壮的ere_parenthesize函数,需要准确解析用户提供的ERE(扩展正则表达式)中的括号表达式。核心难点在于,不同Awk实现对括号表达式里的字符类[: :]、**等价类[= =]和排序符号[. .]**的支持存在差异,这直接影响到判断括号表达式终止位置的准确性。
我基于多环境测试提出了三个关于Awk正则引擎特性的假设,现请求各位用手头不同的Awk版本/操作系统运行下方测试代码,验证或推翻这些假设。
另外,还想确认match("1", /[[:xdigit:]]/)的结果是否与区域设置(locale)无关。
测试代码
BEGIN { ere_brackets_have_character_classes = match("1", /[[:xdigit:]]/) ere_brackets_have_equivalence_classes = !match("]", /[[=x=]?]/) ere_brackets_have_backslash_escape_bug = match("]", /[[=\t=]?]/) print "ere_brackets_have_character_classes :", ere_brackets_have_character_classes print "ere_brackets_have_equivalence_classes :", ere_brackets_have_equivalence_classes print "ere_brackets_have_backslash_escape_bug :", ere_brackets_have_backslash_escape_bug if (ere_brackets_have_equivalence_classes) { if (ere_brackets_have_backslash_escape_bug) { print "Assumption #1: expected output: 1" r = "[[=x]?]" print match("]", r) } else { print "Assumption #2: expected output: crash" r = "[[=\\t]]" match("]", r) } } else if (ere_brackets_have_character_classes) { print "Assumption #3: expected output: 1" split("[[:xdigit]?] [[:abc:]?] [[::]?] [[:]?]", a, " ") print match("]", a[1]) && \ match("]", a[2]) && \ match("]", a[3]) && \ match("]", a[4]) } else { print "no expected output: nothing" } }
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

