本人使用正则表式,主要是为了对数据验证提高效率。但不知还有什么其它的妙用。
一、常用元字符
所谓元字符,是正则表达式规定的一些特殊代码,在表达式中有特殊的含义,这里只列出了一些很常用的
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
/w | 匹配字母或数字或下划线或汉字 |
/s | 匹配任意的空白符 |
/d | 匹配数字 |
/b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
代码/语法 | 说明 |
---|---|
/W | 匹配任意不是字母,数字,下划线,汉字的字符 |
/S | 匹配任意不是空白符的字符 |
/D | 匹配任意非数字的字符 |
/B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
二、常用正则表达式
匹配中文字符的正则表达式: [/u4e00-/u9fa5] 只要包含中文就返回true
匹配Email地址的正则表达式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^/s]*
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:/d{3}-/d{8}|/d{4}-/d{7}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]/d{5}(?!/d)
匹配身份证:/d{15}|/d{18}
匹配ip地址:/d+/./d+/./d+/./d+
匹配Email地址的正则表达式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^/s]*
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:/d{3}-/d{8}|/d{4}-/d{7}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]/d{5}(?!/d)
匹配身份证:/d{15}|/d{18}
匹配ip地址:/d+/./d+/./d+/./d+
匹配特定数字:
^[1-9]/d*$ //匹配正整数
^-[1-9]/d*$ //匹配负整数
^-?[1-9]/d*$ //匹配整数
^[1-9]/d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]/d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //匹配正浮点数
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //匹配负浮点数
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //匹配浮点数
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //匹配非正浮点数(负浮点数 + 0)
^[1-9]/d*$ //匹配正整数
^-[1-9]/d*$ //匹配负整数
^-?[1-9]/d*$ //匹配整数
^[1-9]/d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]/d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //匹配正浮点数
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //匹配负浮点数
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //匹配浮点数
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //匹配非正浮点数(负浮点数 + 0)
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^/w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^/w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
三、javascript中正则表达式的使用
以下代码用来测试字符串是否含有'/等非法字符,由test方法执行。
<script>
var s= 'sdfd//f';
alert(issafe(s));
function issafe(str){
var reg = /^.*[||/|<|>].*$/;
return !reg.test(str);
}
</script>
var s= 'sdfd//f';
alert(issafe(s));
function issafe(str){
var reg = /^.*[||/|<|>].*$/;
return !reg.test(str);
}
</script>
四、java中正则表达式的使用
如下,先要导入regex包,这个例子测试字符串是否是一个网址。
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void main(String [] args) throws ClassNotFoundException, SQLException{
Pattern pattern = Pattern.compile("[a-zA-z]+://[^//s]*");
String phone = " http://www.sina.com";
Matcher matcher = pattern.matcher(phone);
if (matcher.find()){
System.out.println("correspond");
}else{
System.out.println("no correspond");
}
}
public static void main(String [] args) throws ClassNotFoundException, SQLException{
Pattern pattern = Pattern.compile("[a-zA-z]+://[^//s]*");
String phone = " http://www.sina.com";
Matcher matcher = pattern.matcher(phone);
if (matcher.find()){
System.out.println("correspond");
}else{
System.out.println("no correspond");
}
}