[入门] D正则怎样匹配全角空格

tuja 2007-05-19
基于D正则和pcre有些不太一样,有时怎么也得不到相应的pattern。

比如全角空格在GBK里是\xa1\xa1

如果能打印出相应字符的内码编码(如UTF-8,gbk),则可以:
char[] s = r" ";//全角空格
char[] pattern = getPattern(s);

char[] getPattern(char[] s) //by qiezi
{   
  char[] result;   
  foreach(c; s)   
    result ~= std.string.format("\\x%x", c);   
  return result;   
}   



我测试了一下,用qiezi的代码得到全角空格16进制编码是\xe3\x80\x80,但却无法匹配成功

char[] s = " ";//全角空格   
char[] result = std.regexp.sub(s,r"\xe3\x80\x80","ok");   
writefln("result=%s,",result);   //匹配失败



qiezi 2007-05-19
char[] getPattern(char[] s) {
  char[] result;
  foreach(c; s)
    result ~= std.string.format("\\x%x", c);
  return result;
}
tuja 2007-05-19
谢谢!
我测试了一下,全角空格是\xe3\x80\x80,但却无法匹配成功:
char[] s = " ";//全角空格
char[] result = std.regexp.sub(s,r"\xe3\x80\x80","ok");
writefln("result=%s,",result);
qiezi 2007-05-19
r"\xe3\x80\x80"改成"\xe3\x80\x80",既然是要用\x进行转义,还加上个r做啥呢。
Global site tag (gtag.js) - Google Analytics