正则表达式,java,js简单应用

正则表达式,适用多种语言,不同语言正则基本相同,使用正则很多时候能极大的提高效率。

这里我根据自己的想法总结一些常用的正则表达式,并附加一些例子。
写的不对的地方还希望大家能够支出。

正则表达式语法
"\"为转移符如"\d"在java中为"\\d"

我将之分成了三大类
一、匹配项——真正用于匹配的规则
    \d 数字字符匹配。等效于 [0-9]。
    \D 非数字字符匹配。等效于 [^0-9]。
    \w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
    \W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
    \n 换行符匹配。等效于 \x0a 和 \cJ
    \r 匹配一个回车符。等效于 \x0d 和 \cM。
    \s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
    \S 匹配任何非空白字符。
    \f 换页符匹配。等效于 \x0c 和 \cL。
    . 匹配除"\r\n"之外的任何单个字符。
    \b 匹配一个字边界,即字与空格间的位置,单词边界。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
    \B 非字边界匹配。
    \cx 匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。
x的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。

二、匹配限制项——匹配的范围
    ^ 放在开头,匹配从第一个开始的字符,放在"[]"中表示非
    $ 放在结尾,匹配最后一个字符
    * 0次或多次,等效于{0,}
    + 1次或多次,等效于{1,}
    ? 0次或1次,等效于{0,1}。如紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,
匹配模式为非贪心模式。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。
    {n} n 是非负整数。正好匹配 n 次。例如,"o{2}"与"food"中的两个"o"匹配。
    {n,} n 是非负整数。至少匹配 n 次。

    {n,m} m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。


    下面是限制范围并不属于限定符
    x|y 匹配 x 或 y。
    [xyz] 字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。
    [^xyz] 反向字符集。匹配未包含的任何字符。
    [a-z] 字符范围。匹配指定范围内的任何字符。

    [^a-z] 反向范围字符。匹配不在指定的范围内的任何字符。

    (xyz) 匹配xyz这个整体


三、匹配修饰项——不存储供以使用的匹配,非捕获匹配
    (?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。
这对于用"or"字符 (|) 组合模式部件的情况很有用。
例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。


    (?=pattern) 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。
它是一个非捕获匹配,即不能捕获供以后使用的匹配。
例如,'Windows (?=95|98|NT|2000)' 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。
预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。


    (?!pattern) 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。
它是一个非捕获匹配,即不能捕获供以后使用的匹配。
例如,'Windows (?!95|98|NT|2000)' 匹配"Windows 3.1"中的 "Windows",但不匹配"Windows 2000"中的"Windows"。

预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。

参考:http://www.runoob.com/java/java-regular-expressions.html


下面写几个例子以供熟悉

java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

	public static void main(String[] args) {
		String line = "schoolmate";
	    String regex = "school";//正则
		Pattern patt = Pattern.compile(regex);
		Matcher m = patt.matcher(line);
	    
		//等同于Pattern.matches(regex, line)
		System.out.println(m.matches());//结果,false
		System.out.println(m.lookingAt());//结果,true
//		matcher 要求整个序列都匹配,而lookingAt 不要求。
		
		common("kljlk@klc.sd");
	}
	//常用的验证项
	public static void common(String str){
		System.out.println("原有的字符串"+str);
		System.out.println("是否是数字:"+Pattern.matches("^[0-9]+$", str));
		System.out.println("是否有汉字:"+Pattern.compile("[\u4e00-\u9fa5]").matcher(str).find());
		System.out.println("验证手机号:"+Pattern.matches("^0?1[34578]\\d{9}$", str));
		System.out.println("验证邮箱:"+Pattern.matches("^[a-zA-Z0-9_-]+@\\w+\\.[a-zA-Z0-9]{2,3}$", str));
	}
}


JS正则表达式的创建
   1)直接量创建法:
       var pattern=/s$/; 
       像字符串的创建可以用一对引号一样,正则表达式的创建则可以用一对斜杠号(//)
   2)对象创建法:
     var pattern=new RegExp(“s$”);    //这个式子与上面那个事等价的

<script>
	var str = " a";
	console.info("验证手机号:"+/^0?1[134578]\d{9}/.test(str))
	console.info("验证有汉字:"+/[\u4e00-\u9fa5]/.test(str))
	console.info("验证邮箱:"+/^[a-zA-Z0-9_-]+@\w+\.[a-zA-Z0-9]{2,3}$/.test(str))
	str = str.replace(/(^\s*)|(\s*$)/g,"");//去除首尾空格,解决trim()不通用的问题
	console.info(str)
</script>


   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值