博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式
阅读量:2147 次
发布时间:2019-04-30

本文共 2615 字,大约阅读时间需要 8 分钟。

正则表达式

检查、匹配字符串的表达式

正则表达式是描述规则,主流语言都有良好支持

字符串校验、查找与替换是正则表达式主要使用场景

字符范围匹配

开源中国开源的正则表达式测试工具:https://tool.oschina.net/regex

正则表达式 说明
A 精准匹配单个字符或短语
x|y 允许出现的2个字符
[xyz] 字符集合,允许出现集合内任意单个字符
[a-z]
[A-Z]
[0-9]
字符范围
[^xyz]
[^0-9]
集合内字符不允许出现

元字符

正则表达式 说明
\d 匹配任意单个数字
\D 匹配\d规则之外的任意单个字符
\w 匹配任意单个字母数字下划线
\W 匹配\w之外的任意单个字符
\s 匹配单个空格
\n 匹配单个换行符
. 匹配任意单个字符(换行符除外)
\. 特殊字符,只匹配.

多次重复匹配

正则表达式 说明
A{3} 精准匹配N次
A{3,} 最少出现N次
\d{3,5} 约定出现最少次数与最大次数
\d* 字符可以出现零次至无限次,相当于{0,}
\d+ 字符最少出现一次,相当于{1,}
\d? 字符最多出现一次,相当于{0,1}

定位匹配

正则表达式 说明
^A.* 头匹配,以某个字符(串)开头的字符串
.*A$ 尾匹配,以某个字符(串)结尾的字符串
^A.*A$ 全字匹配,以某个字符(串)开头,某个字符(串)结尾

贪婪模式与非贪婪模式

贪婪模式

在满足条件的情况下尽可能多匹配到字符串

示例:111222333 正则:\d{6,8}

匹配结果:11122233

贪婪模式是正则表达式的默认匹配规则

非贪婪模式

在满足条件的情况下尽可能少匹配到字符串,在后面加问号

示例:111222333 正则:\d{6,8}?

匹配结果:111222

示例:<a href="www.baidu.com">百度</a><a href="www.sina.com">新浪</a>

“.*”

"www.baidu.com">百度</a><a href="www.sina.com"

“.*?”

"www.baidu.com"

"www.sina.com"

表达式分组

分组将"正则"分组为多个子表达式,用小括号分组包裹重复匹配

示例:abababcdcdcd

正则表达式:(ab){3}(cd){3}

示例:匹配4位或6位验证码

(^\d{4}$)|(^\d{6}$)

正则表达式允许使用Unicode码来表达汉字

示例:匹配中文姓名

^[\u4e00-\u9fa5]{2,8}$

JavaScript表单验证

index.html

Insert title here
姓名:
身份证:

Java中Web页面信息提取

city.html文件中是一堆li列表,列表中有城市中文名和英文名,例:<li>沈阳Shenyang</li>

RegexSample.html

package regex;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexSample {
public static void main(String[] args) {
StringBuilder content = new StringBuilder(); try {
FileInputStream fis = new FileInputStream("city.html"); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); //可选,引入缓冲的机制提高文件读取的效率 BufferedReader bufferedReader = new BufferedReader(isr); String lineText = ""; while((lineText=bufferedReader.readLine()) !=null ) {
content.append(lineText + "\n"); } bufferedReader.close();// System.out.println(content); }catch (IOException e) {
// TODO: handle exception } //创建正则表达式对象 Pattern p = Pattern.compile("
  • ([\\u4e00-\\u9fa5]{2,8})([a-zA-Z]+)
  • "); //匹配正则表达式 Matcher m = p.matcher(content); //查找匹配结构 while(m.find()) {
    System.out.println(m.group(0));//打印全部 System.out.println(m.group(1));//打印第一个分组 System.out.println(m.group(2));//打印第二个分组 } }}

    转载地址:http://udzwb.baihongyu.com/

    你可能感兴趣的文章
    如何选择优化器 optimizer
    查看>>
    一文了解强化学习
    查看>>
    CART 分类与回归树
    查看>>
    seq2seq 的 keras 实现
    查看>>
    seq2seq 入门
    查看>>
    什么是 Dropout
    查看>>
    用 LSTM 做时间序列预测的一个小例子
    查看>>
    用 LSTM 来做一个分类小问题
    查看>>
    详解 LSTM
    查看>>
    按时间轴简述九大卷积神经网络
    查看>>
    详解循环神经网络(Recurrent Neural Network)
    查看>>
    为什么要用交叉验证
    查看>>
    用学习曲线 learning curve 来判别过拟合问题
    查看>>
    用验证曲线 validation curve 选择超参数
    查看>>
    用 Grid Search 对 SVM 进行调参
    查看>>
    用 Pipeline 将训练集参数重复应用到测试集
    查看>>
    PCA 的数学原理和可视化效果
    查看>>
    机器学习中常用评估指标汇总
    查看>>
    什么是 ROC AUC
    查看>>
    Bagging 简述
    查看>>