写一个JDBC程序,遇到用户输入匹配问题(检查用户输入是否为整数),卡壳了,上CSDN问了问,居然有人给出这个东西:

String str="4343";
System.out.println(str.matches("(\\-|\\+)?[1-9]{1}\\d*"));

看得我头大,这是用正则表达式来判断用户输入,我Google、我翻JDK……

Google上找到一篇文章看了看,JDK 1.4以前的版本是没有正则表达式的,只能用Apache的Jakarta-ORO包,JDK 1.4才加入支持。

http://www.baidu.com/baidu?wd=java+%D5%FD%D4%F2%B1%ED%B4%EF%CA%BD&cl=3

java的正则表达式是通过java.util.regex这个包来实现的。这个包里有两个类: Matcher和Pattern,用法看这里:

http://www-900.ibm.com/developerWorks/cn/java/l-regp/part2/index.shtml

正则表达式可以做什么用?它可以做这些事情(不过可以肯定它可以做的事情更多):

简单的单词替换
电子邮件确认
从文件中删除控制字符
查找文件

那么这个正则表达式是什么意思呢?

("(\\-|\\+)?[1-9]{1}\\d*")

(\\-|\\+)?  这个是检查正负号匹配的,?代表前面()中的那一部分(正负号)是可选匹配条件,|代表两边任意一个,\\-和\\+分别代表-和+两个符号,不过为什么这里要写两个\呢?待我研究研究。

[1-9]{1}\\d*

[1-9]{1}代表数字的第一位必须是1-9之中的任何一个字符,不能是0,后面的\\d检查是不是整数,*则代表可以多次匹配。

("[1-9]{1}\\d*")   改成这样的话就只能匹配多位无符号整数
("\\d*")                改成这样的话就只能匹配多位无符号整数,而且第一位也可以是0
("\\d{1}")             改成这样的话就只能匹配1位无符号整数,而且第一位也可以是0
("[237]")             这样就只能匹配[]中的任意一个字符,即2、3、7
("[23|745]")       这样就只能匹配()中的指定字符,即23、745

正则表达式不太容易理解,但是一旦理解了会很有帮助。

IBM DeveloperWorks上的两篇文章:
http://www-900.ibm.com/developerWorks/cn/java/l-regp/part1/index.shtml
http://www-900.ibm.com/developerWorks/cn/java/l-regp/part2/index.shtml

Pattern模板中的部分写法:

x 字符 x
\\ 反斜线字符
\0n 八进制值的字符0n (0 <= n <= 7)
\0nn 八进制值的字符 0nn (0 <= n <= 7)
\0mnn 八进制值的字符0mnn 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh 十六进制值的字符0xhh
\uhhhh 十六进制值的字符0xhhhh
\t 制表符('\u0009')
\n 换行符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 响铃符 ('\u0007')
\e 转义符 ('\u001B')
\cx T对应于x的控制字符 x

字符类
[abc] a, b, or c (简单类)
[^abc] 除了a、b或c之外的任意 字符(求反)
[a-zA-Z] a到z或A到Z ,包含(范围)
[a-z-[bc]] a到z,除了b和c : [ad-z](减去)
[a-z-[m-p]] a到z,除了m到 p: [a-lq-z]
[a-z-[^def]] d, e, 或 f

预定义的字符类
. 任意字符(也许能与行终止符匹配,也许不能)
\d 数字: [0-9]
\D 非数字: [^0-9]
\s 空格符: [ \t\n\x0B\f\r]
\S 非空格符: [^\s]
\w 单词字符: [a-zA-Z_0-9]
\W 非单词字符: [^\w]