D语言的正则表达式例子

部分内容来自wiki4D.
[code]module regexp;

import std.stdio : writefln;
import std.regexp;
import std.c.stdio;

bool isalpha(char[] c)
{
RegExp myRegExp;
myRegExp = new RegExp("^[a-zA-Z_]+$", "");
return cast(bool) myRegExp.test(c);
}

bool isspace(char[] c)
{
/* true if c is whitespace, false otherwise */

RegExp myRegExp = new RegExp("^\\s+$", "");
return cast(bool) myRegExp.test(c);
}

bool isdigit(char[] c)
/* true if c is a decimal digit, false otherwise */
{
RegExp myRegExp = new RegExp("^\\d+$", "");
return cast(bool) myRegExp.test(c);
}

bool ishexdigit(char[] c)
/* true if c is a hexadecimal digit, false otherwise */
{
RegExp myRegExp = new RegExp("^[0-9A-F]+$", "");
/* If it were D code, "_" would also be valid */

return cast(bit) myRegExp.test(c);
}

bool isoctdigit(char[] c)
/* true if c is an octal digit, false otherwise */
{
RegExp myRegExp = new RegExp("^[0-7]+$", "");
return cast(bool) myRegExp.test(c);
}

bool issymbol(char[] c)
/* true if c is legal SQL symbol, false otherwise */
{
RegExp myRegExp = new RegExp("^[\\(\\)\\[\\]\\.,;=<>\\+\\-\\*/&\\^]+$", "");
return cast(bool) myRegExp.test(c);
}

bool isDate(char[] c)
/* true if c is a date, false otherwise */
{
RegExp myRegExp = new RegExp("((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}", ""); //1900
return cast(bool) myRegExp.test(c);
}

bool isChinese(char[] c)
/* true if c is a chinese string, false otherwise */
{
RegExp myRegExp = new RegExp("^[\u4e00-\u9fa5]+$", "");
return cast(bool) myRegExp.test(c);
}

bool iscnPhone(char[] c)
/* true if c is a china phone code, false otherwise */
{
RegExp myRegExp = new RegExp("\\d{3}-\\d{8}|\\d{4}-\\d{7}", "g");
return cast(bool) myRegExp.test(c);
}

bool iscnMobile(char[] c)
/* true if c is a china Mobile code, false otherwise */
{
RegExp myRegExp = new RegExp("^((\\(\\d{2,3}\\))|(\\d{3}\\-))?13\\d{9}$", "");
return cast(bool) myRegExp.test(c);
}

bool iscnZip(char[] c)
/* true if c is a china ZIP, false otherwise */
{
RegExp myRegExp = new RegExp("^[0-9]\\d{5}$", "");
return cast(bool) myRegExp.test(c);
}

bool iscnIDcard(char[] c)
/* true if c is a china ID card, false otherwise */
{
RegExp myRegExp = new RegExp("\\d{15}|\\d{18}", "");
return cast(bool) myRegExp.test(c);
}

unittest
{
/* compile with the -unittest flag to run these tests */

writefln("Testing functions...");

assert(isalpha("a") && isalpha("A") && !isalpha("9") && isalpha("_") && isalpha("R") && !isalpha("&"));

assert(issymbol("(") && issymbol(")") && issymbol("[") && issymbol("]") && issymbol(")") &&
issymbol("[") && issymbol("]") && issymbol("-") && issymbol("/") && issymbol("=") && issymbol("*") &&
issymbol(".") && !issymbol("a") && !issymbol("0") && !issymbol("Y") && !issymbol("\\"));

assert(isdigit("0") && isdigit("7") && isdigit("9") && !isdigit("A") && !isdigit("^") && !isdigit("G"));

assert(ishexdigit("0") && ishexdigit("7") && ishexdigit("A") && !ishexdigit("^") && !ishexdigit("G"));

assert(isoctdigit("0") && isoctdigit("7") && !isoctdigit("8") && !isoctdigit("A") && !isoctdigit("^"));

assert(isspace(" ") && isspace("\t") && !isspace("o") && !isspace(".") && !isspace("5"));

assert(isChinese("中文") && isChinese("哦") && !isChinese("*.") && !isChinese("abcd") && !isChinese("5"));

assert(iscnPhone("010-12345678") && iscnPhone("0710-1234567") && !iscnPhone("01-12345") && !iscnPhone("010-12") && !iscnPhone("0314-123456") && iscnPhone("0314-12345678-90")&& iscnPhone("0314-12345678-901") && iscnPhone("012345-12345678-901") );

assert(iscnMobile("13123456789")&& !iscnMobile("139123456789") && !iscnMobile("*.") && !iscnMobile("abcd") && !iscnMobile("5") );

assert(iscnZip("100081")&& iscnZip("012346") && !iscnZip("*.") && !iscnZip("abcd") && !iscnZip("5") );


writefln("Functions tested successfully.");
}

void main()
{
/* Compile with the -debug flag for this statement to run. */

debug writefln("Main Program.");

}[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值