java使用正则表达式验证交互程序接收的字符串格式
java使用正则表达式有一个非常简单的方式,字符串类String有个方法matches(String regex),Pattern类里边也有一个
matches (String regex, CharSequence input) 可以直接验证字符串是否能够匹配作为参数给定的正则表达式,这里的CharSequence是String/StringBuffer/StringBuilder/CharBuffer所实现的借口,所以可以直接传入String或者StringBuffer.
正则表达式是搜索、替换和解析复杂字符模式的一种强大而标准的方法。字符串也有很多方法,可以进行搜索 (index
、 find
和 count
)、替换 (replace
) 和解析 (split
),但它们仅限于处理最简单的情况。搜索方法查找单个和固定编码的子串,并且它们总是大小写敏感的。对一个字符串 s
,如果要进行大小写不敏感的搜索,则你必须调用 s.lower()
或 s.upper()
将 s
转换成全小写或者全大写,然后确保搜索串有着相匹配的大小写。 replace
和 split
方法有着类似的限制。如果你要解决的问题利用字符串函数能够完成,你应该使用它们。它们快速、简单且容易阅读,而快速、简单、可读性强的代码可以说出很多好处。但是,如果你发现你使用了许多不同的字符串函数和 if
语句来处理一个特殊情况,或者你组合使用了 split
、 join
等函数而导致用一种奇怪的甚至读不下去的方式理解列表,此时,你也许需要转到正则表达式了。[1]
正则表达式特殊标记:
^指定必须从字符串开头,
$指定字符串尾部必须匹配,
?指定该符号之前的一个匹配符号是可选匹配.
{l,m}指定花括号之前一个匹配符号可以重复匹配至少l次,最多m次,
+指定该符号之前的匹配符号可以匹配1次或者多次,
*指定该符号之前的匹配符号可以匹配0次或者多次.
例如:
我刚刚写了一个程序用来帮助网络游戏登录时候密码保护卡的使用,基本使用流程是这样子的:每次等率游戏的时候在点击自己的角色之后会弹出一个提示框,上边显示三个坐标,如:[G,12][B,4][A,9].当然密码保护卡是之前自己绑定在游戏帐号上边的.
这个程序运行框有一个文本输入框可以输入坐标,坐标使用三个坐标的连写并且没有空格,这当然是我在使用的时候不想点击空格键造成的,我觉得笔记本的空格键是最不好用的一个键,我的大拇指总是被键盘后便的板子托住造成空格键输入失败.不好意思,说歪了话题.事实上很简单,如上边的这个坐标你就只需要输入'g12b4a9',大小写无所谓.
因为密码保护卡有7行12列,也就是([a-g]*1-12),这个时候要验证我有没有输入正确的坐标就会写成这样的一个表达式"^([a-g]([1-9]|(1?[0-2]))){3}$",^$分别表示匹配开始和结尾,{3}表示必须匹配三次,[a-g]匹配字母a-g的其中一个,[1-9]|(1?[0-2])匹配1-12个数字.
程序如下:
String regex = "^([a-g]([1-9]|(1?[0-2]))){3}$",grid = "G12B4A9";
boolean isGridAvailable grid.toLowerCase().matches(regex);
[1],本段摘自Drive Into Python中文版第七章