正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),即"描述某种规则的表达式",是计算机科学的一个概念。
一个正则表达式通常被称为一个模式(pattern),是用来描述或者匹配一系列符合某个句法规则的字符串。许多程序设计语言都支持利用正则表达式进行字符串操作。我们说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
1.正则表达式基础
正则表达式中需要注意的知识点如下,
1) 元字符 - 特殊含义的字符
代码 说明 . 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线或汉字 s 匹配任意的空白符 d 匹配数字 b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束
Tips: 如果想查找元字符本身,比如查找.或者*,这时就得使用转义字符,即使用.和*。当然,要查找本身,也得用.
2) 限定符 - 限定重复次数
代码 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次
3) 字符组 - 匹配若干字符、匹配范围
[] //字符串用中括号[]括起来,表示匹配其中的任一字符,如[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号.或?或!。 - //连字符-表示一个范围,[0-9]与[0123456789]意思相同,类似的还有[a-z],[A-Z]。
4) 多选结构 - 分支条件
| //用|把不同的规则分隔开,它的意思是或。如gray|grey 既可匹配gray又可匹配grey,相当于gr[ae]y
5) 反义符
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义: 代码/语法 说明 W 匹配任意不是字母,数字,下划线,汉字的字符 S 匹配任意不是空白符的字符 D 匹配任意非数字的字符 B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
2.正则表达式示例
1)Java中正则表达式处理示例
Java中,可使用java.util.regex包(since JDK1.4)中的Pattern类和Matcher类处理正则表达式,下面是2个简单的示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* 正则表达式处理示例
*
*/
public class TestRegex {
public static void main(String[] args) {
//定义模式
Pattern pattern = Pattern.compile("asb.*c");// space: " " or "s"
//定义匹配器
Matcher matcher = pattern.matcher("hello a b123c world!");
//匹配检测,整个输入序列与该模式匹配时,才返回true
System.out.println(matcher.matches());//false
//如果找到匹配的子字符串,则打印出来
if(matcher.find()){
System.out.println(matcher.group());//a b123c
}
//也可直接进行模式匹配
boolean b = Pattern.matches("a*b","aaab");
System.out.println(b);//true
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* 正则表达式处理示例2
*
*/
public class TestRegex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile("a(.+?)c");
Matcher m = p.matcher("abcaddcacd");
while (m.find()) {
String s = m.group();
//group是针对()来说的
//group(0)指匹配出的整个串
String s0 = m.group(0);
//group(1)指的是第1个括号里的东西
String s1 = m.group(1);
//依次输出:
//abc||abc||b
//addc||addc||dd
System.out.println(s + "||" + s0 + "||" + s1);
}
//匹配器重置输入序列
m.reset("axxc!");
while (m.find()) {
System.out.println(m.group());//axxc
}
}
}
2)JavaScript中正则表达式处理示例
在JavaScript中,可以通过内建的Regex类来声明一个正则表达式,如: var regex = new RegExp("a"); 也可用字面量的声明方式,如: var regex = /a/; 声明时可以使用额外的参数i,g或m指定处理方式,含义如下: i - 执行对大小写不敏感的匹配 g - 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) m - 执行多行匹配
刚才的例子中,如果需要忽略大小写,则应该这样定义: var regex = new RegExp("a","i"); var regex = /a/i;
Regex对象中可用的方法如下: compile() - 编译正则表达式 exec() - 检索字符串中指定的值,返回找到的值,并确定其位置 test() - 检索字符串中指定的值,返回true或false
支持正则表达式的String对象的方法如下: match() - 找到一个或多个正则表达式的匹配 replace() - 替换与正则表达式匹配的子串 search() - 检索与正则表达式相匹配的值 split() - 把字符串分割为字符串数组
下面是几个简单的正则表达式处理示例,
/**
* 判断是否为空串或null.
* @param argValue 检测对象
* @return 检测结果
*/
function eValidateEmpty(argValue) {
// argValue为空串或null,返回true
return argValue == null || argValue == "";
}
/**
* 去除字符串首末空格后,判断是否为空串或null.
* @param argValue 检测对象
* @return 检测结果
*/
function eValidateEmpty2(argValue) {
// argValue为空串或null,返回true
argValue = eTrim(argValue);
return argValue == null || argValue == "";
}
/**
* 去除字符串首末空格.
* @param argValue 操作对象
* @return 去除首末空格的字符串
*/
function eTrim(argValue) {
if (eValidateEmpty(argValue)) {
return "";
}
return argValue.replace(/^(s| )*/,"").
replace(/(s| )*$/,"");
}
/**
* 判断email格式.
* @param argValue 检测对象
* @return 检测结果
*/
function eValidateEmail(argValue){
if (eValidateEmpty(argValue)) {
return false;
}
var result = argValue.match(/^S+@S+.S+$/);
if(!result) {
return false;
}
return true;
}
/**
* 判断电话号码格式.
* @param argValue 检测对象
* @return 检测结果
*/
function eValidatePhone(argValue) {
if (eValidateEmpty(argValue)) {
return false;
}
var reg=/(^(+|-)[0-9]{2}[0-9]{3,4}-[0-9]{7,8}$)|(^[0-9]{3,8}$)|(^[0-9]{7,8}$)|(^([0-9]{3,4})[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
if (!reg.test(argValue)) {
return false;
}
return true;
}
/**
* 判断URL格式.
* @param argValue 检测对象
* @return 检测结果
*/
function eValidateURL(argValue) {
if (eValidateEmpty(argValue)) {
return false;
}
var regExp=new RegExp(/^http://w+(.w+)*(/w+)*(?w+=w*(&w+=w*)*)?$/g);
if (argValue.match(regExp)==null) {
return false;
}
return true;
}
/**
* 根据给定的格式(正则表达式),进行判断.
* @param argValue 检测对象
* @param mask 正则表达式
* @return 检测结果
*/
function eValidateMask(argValue,mask) {
var isValid = true;
var value = eTrim(argValue);
if (eValidateEmpty(value) || eValidateEmpty(mask)) {
return false;
}
if (!mask.exec(value)) {
isValid = false;
}
return isValid;
} 参考资料:
正则表达式30分钟入门教程
http://deerchao.net/tutorials/regex/regex.htm
正则表达式(一) -- 元字符
http://www.cnblogs.com/kissdodog/archive/2013/04/22/3036649.html (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|