您的位置:首页 > 编程语言 > Java开发

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

2017-02-13 15:15 369 查看
正则表达式,适用多种语言,不同语言正则基本相同,使用正则很多时候能极大的提高效率。

这里我根据自己的想法总结一些常用的正则表达式,并附加一些例子。

写的不对的地方还希望大家能够支出。

正则表达式语法

"\"为转移符如"\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>


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 java js