• 3959阅读
  • 4回复

为什么当字符大于\xfa时,就正则表达式不能编译通过?注:不是说代码不能编译通过,而是说正则表达式 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-06
using namespace std;
#include <QtGui>
#include <iostream>
#include <regex.h>

//------------------------以下代码输出结果:  ok!-------------------------------------
int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    char pattern[10]="[\x41-\x7a]";
    regex_t reg;   int cflags=11;
    int rc=regcomp(&reg,pattern,cflags);
    if(rc!=0) {cout<<"error!"<<endl;} else {cout<<"ok"<<endl;}
    return app.exec();
}

//----------------以下代码输出结果:  error!-----------------------
int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    char pattern[10]="[\x41-\x7b]";                  //与代码1不同的地方:\xfb
    regex_t reg;   int cflags=11;
    int rc=regcomp(&reg,pattern,cflags);
    if(rc!=0) {cout<<"error!"<<endl;} else {cout<<"ok"<<endl;}
    return app.exec();
}
离线seekawayout

只看该作者 1楼 发表于: 2010-02-07
别问我为什么,我的正则表达式也不是很好,
不知道你是不是linux中
在我这测试的是如果语言环境为zh_CN.UTF-8的话提示:无效的范围结束符(>\x7a && <=\x7f),Invalid collation character(>\x7f,>\x7f后char值为负数),基本上大于\x7a就会错误,似乎在这个环境下只认[A-z](英文字母)的范围,而不是ascii的范围,\x7a为z,\x7b为{,且不能是扩展的ascii字符(>127)。如果执行命令export LANG=en,把语言环境设为英语,则两个都正确,基本上多大都正确。如果不是bug,就应该和语言或者字符编码有关吧。
[ 此帖被seekawayout在2010-02-07 06:55重新编辑 ]
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2010-02-07
还是不行,执行了export LANG=en后,还是不能编译通过啊,你的行吗?
离线iiiyyyhhhsss

只看该作者 3楼 发表于: 2010-02-07
行了,谢谢你的解决方案,只是不知道执行了export LANG=en后,会不会影响原来的中文环境呢?
好像每次运行这样的程序前都要执行一遍"export LANG=en"才行,
而且每次都有运行提示:

(<unknown>:3040): Gtk-WARNING **: Locale not supported by C library.
        Using the fallback 'C' locale.

说locale不支持C库,使用后备C策略,这个由影响吗?
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2010-02-07
我现在发现执行"export LC_ALL=C"也是行的,

而且程序运行时不会有提示:
                          Gtk-WARNING **: Locale not supported by C library.
        Using the fallback 'C' locale.
快速回复
限100 字节
 
上一个 下一个