用于匹配字母数字的可移植正则表达式

时间:2016-05-06 14:37:59

标签: c++ regex encoding ebcdic

我正在考虑使用正则表达式[0-9a-zA-Z]+来匹配C ++标准库的正则表达式库中的任何字母数字字符串。

但我担心便携性。当然,在ASCII字符集中,这将起作用,我认为0-9 必须只匹配任何编码系统中的数字,因为标准坚持所有编码都具有此属性。但是C ++标准并没有坚持ASCII编码,所以我的a-zA-Z部分可能会在某些平台上给我奇怪的结果;例如那些使用EBCDIC编码的那些。

我可以使用\d作为数字部分,但也匹配阿拉伯数字。

应该我用于完全可移植的正则表达式,它只匹配任何一个案例的数字和英文字母?

2 个答案:

答案 0 :(得分:0)

似乎PCRE(当前版本为PCRE2)支持其他编码类型,包括EBCDIC。

在他们网站的源代码中,我找到了" this file"以下(格式化我的):

  

一个名为dftables的程序(与PCRE2一起分发)可用于构建this file的替代版本。如果您在EBCDIC环境中运行,或者您希望默认使用其他编码(例如ISO-8859-1),则必须执行此操作。运行dftables时,它会在当前语言环境中创建这些表。如果PCRE2配置了--enable-rebuild-chartables,则会自动发生。

答案 1 :(得分:0)

好吧,如果你担心支持异国情调的编码,你可以手动列出所有字符:

[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]+

这看起来有点脏,但肯定会在任何地方都有用。