我用 C 语言创建了一个函数,用于使用正则表达式在某些条件下识别整数。 正则表达式在 UNIX 和其他平台上运行良好,但是当我在大型机 TN3270 上使用同一段代码时,字符串/正则表达式中的字符如“[”、“]”、“{”、“}”被替换为编译时的空格。 我尝试在所有这些字符前使用“\”,并在 regcomp 期间使用 REG_EXTENDED,但结果没有变化。
int VALNUM ()
{
regex_t s_regex, *ps_regex = &s_regex;
char pc_regexpInt[ ] = "^[+-]{0,1}[0-9]{1,} *";
printf("pc_regexpInt value:%s\n",pc_regexpInt);
regcomp(ps_regex, pc_regexpInt, REG_EXTENDED)
regexec(ps_regex, pc_buffer, 0, NULL, 0);
regfree(ps_regex);
}
对我来说,printf 返回:
pc_regexpInt value:^ +- 0,1 0-9 1, *
并且 regexec 也因 pc_buffer 值(+120 或 -3.1415)而失败。
注意:代码编译没有问题,这里我只是写了一段代码。此处缺少声明和所有内容,这不是问题。
任何人请提出建议。
最佳答案
有几个因素在起作用。 ISPF 中编辑器的代码页(如果您正在使用它)、ISPF 中 3270 session 的终端设置以及您运行的代码的代码页。
对于 3270,我发现使用代码页代码页 1047 对我有用。该代码页将左括号和右括号分别映射到 0xAD [
和 0xBD ]
。还有各种其他代码页,但它们通常是为需要将其他字符转换为 Latin-1 的语言环境的编码需求而映射的。
为模拟器设置代码页。例如,我通过选择 session 中的属性来使用 HostOnDemand,然后:
接下来您需要设置 ISPF。这是选择支持括号的终端类型。在 ISPF 中,通过选择菜单 -> 设置将您的终端类型设置为 3277A。
最后一部分是 C 及其语言环境的设置。找到这个reference这应该可以帮助您完成最后的部分。
关于c - 字符串/正则表达式字符 '[' , ']' , '{' , '}' 在大型机 TN3270(代码页 1047,1147,500,249)上用 C 语言替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733821/