比较全面的C 、Java、JavaScript中的正则表达式详解

比较全面的C、Java、JavaScript中的正则表达式详解

什么是正则表达式?

正则表达式是一种语法规则,用于描述字符串的匹配模式。它可以帮助我们从文本中找到我们需要的内容,或者检查字符串是否符合特定的格式。

正则表达式通常包含模式和标志两部分。模式是用来描述匹配规则的,标志则是用来控制匹配方式的。

正则表达式的语法

1. 基础语法

在正则表达式中,有许多特殊字符,它们在正则表达式中有着特殊的含义。下面是一些常见的字符:

  • 字符集

  • [abc] 匹配a,b或c中的任意一个字符

  • [a-z] 匹配所有小写字母
  • [A-Z] 匹配所有大写字母
  • [0-9] 匹配所有数字
  • [^abc] 匹配除a,b,c以外的任意一个字符
  • . 匹配任意一个字符

  • 重复次数

  • * 重复0次或更多次

  • + 重复1次或更多次
  • ? 重复0次或1次
  • {n} 重复n次
  • {n,m} 重复n到m次

  • 边界匹配

  • ^ 匹配字符串的开头

  • $ 匹配字符串的末尾

  • 分组

  • (...) 分组匹配

  • \| 或运算符

2. 特殊字符的转义

在正则表达式中,如果想匹配一些特殊字符,如*+?{}[]().\^$等,需要在前面加\

3. 常用的标志

在正则表达式中,常用的标志有以下几种:

  • i 忽略大小写
  • g 全局匹配
  • m 多行匹配

正则表达式的使用

1. 在C语言中使用正则表达式

在C语言中,我们可以使用<regex.h>头文件中的函数来进行正则表达式的匹配。

#include <stdio.h>
#include <regex.h>

int main()
{
    char *pattern = "([0-9]+)";
    char *str = "hello123world456";
    regmatch_t match[2];

    regex_t reg;
    regcomp(&reg, pattern, REG_EXTENDED);
    regexec(&reg, str, 2, match, 0);

    for (int i = 0; i < 2; i++) {
        printf("%.*s\n", match[i].rm_eo - match[i].rm_so, str + match[i].rm_so);
    }

    regfree(&reg);
    return 0;
}

上面的代码可以匹配字符串中的所有数字,并输出结果。

2. 在Java语言中使用正则表达式

在Java语言中,我们可以使用java.util.regex包中的类来进行正则表达式的匹配。

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

public class Main {
    public static void main(String[] args) {
        String pattern = "([0-9]+)";
        String str = "hello123world456";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

上面的代码同样可以匹配字符串中的所有数字,并输出结果。

3. 在JavaScript中使用正则表达式

在JavaScript中,我们可以使用RegExp对象来进行正则表达式的匹配。

let pattern = /([0-9]+)/g;
let str = "hello123world456";

let result;
while ((result = pattern.exec(str)) != null) {
    console.log(result[1]);
}

上面的代码同样可以匹配字符串中的所有数字,并输出结果。

示例说明

示例1:验证email格式

let pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+$/;
let email = "abc123@qq.com";

if (pattern.test(email)) {
    console.log("Email格式正确");
} else {
    console.log("Email格式错误");
}

上面的代码可以验证email格式是否正确。

示例2:从url中提取参数

let pattern = /[?&]([^=&#]+)=([^&#]*)/g;
let url = "http://www.example.com/index.html?id=123&name=hello&age=18";

let result;
while ((result = pattern.exec(url)) != null) {
    console.log(result[1] + " = " + result[2]);
}

上面的代码可以从url中提取参数,并输出结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:比较全面的C 、Java、JavaScript中的正则表达式详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • 如何计算多个订单的核销金额

    下面我来为你详细讲解如何计算多个订单的核销金额。 一、前置知识 为了更好地理解本文内容,我们先来了解几个概念: 订单金额:指客户在下单时所支付的货款总额,包括商品价格、运费和税费等。 已核销金额:指客户在使用优惠券或礼品卡等优惠手段后,最终实际支付的金额。 未核销金额:指客户在使用优惠券或礼品卡等优惠手段前,实际应该支付的金额。 二、计算多个订单的核销金额的…

    database 2023年5月21日
    00
  • SQL Server 2008数据库分布式查询知识

    SQL Server 2008数据库分布式查询知识 在SQL Server 2008数据库中,分布式查询可以让我们在不同的数据库之间进行查询,并将查询结果汇总为一个结果集。本文将详细讲解SQL Server 2008数据库分布式查询的完整攻略,并提供两个实例说明。 1. 配置分布式查询 1.1 启用OLE DB Provider 在所有参与分布式查询的服务器…

    database 2023年5月21日
    00
  • Linux 下mysql通过存储过程实现批量生成记录

    针对 “Linux 下mysql通过存储过程实现批量生成记录” 这个问题,以下是我的完整攻略,一共包含以下几个方面: 准备工作:安装 mysql 服务器和客户端; 创建存储过程代码:包括参数定义,循环语句,插入语句等; 测试存储过程:通过执行存储过程来生成指定数量的记录; 示例说明:给出两个具体的存储过程代码示例,包括生成随机数记录和生成 IP 地址记录。 …

    database 2023年5月22日
    00
  • springboot整合nacos,如何读取nacos配置文件

    Spring Boot 是一款快速开发框架,而 Nacos 是一个开源的分布式服务发现、配置管理和服务治理平台。将两者整合起来,可以快速实现一个可靠的分布式系统。下面是整合 Nacos 并读取配置文件的完整攻略: 1. 添加依赖 首先,在 Spring Boot 项目中,需要添加一些依赖以使其支持 Nacos。在 pom.xml 文件中添加以下依赖: &lt…

    database 2023年5月18日
    00
  • vscode内网访问服务器的方法

    下面是详细的“vscode内网访问服务器的方法”的攻略。 什么是vscode内网访问服务器? 通常情况下,我们的电脑和服务器一般都处于同一个局域网,如果我们直接在vscode上连接服务器,即使服务器开了对外映射的端口,也无法直接连接,这就是内网访问。 解决方法 要解决这个问题,我们可以通过在本地电脑与服务器之间建立一个SSH隧道,来实现内网访问。下面我们将具…

    database 2023年5月22日
    00
  • mysql 8.0.16 winx64及Linux修改root用户密码 的方法

    以下是“mysql 8.0.16 winx64及Linux修改root用户密码的方法”的完整攻略。 准备工作 在修改root用户密码之前,需要先确保mysql服务已经启动。如果未启动,可以使用以下命令启动mysql服务。 对于Windows系统: net start mysql 对于Linux系统: systemctl start mysqld 进入mysq…

    database 2023年5月22日
    00
  • 2.redis-help使用,基本命令

    redis 帮助 127.0.0.1:6379> help redis-cli 3.0.4 Type: “help @<group>” to get a list of commands in <group> “help <command>” for help on <command> “help &lt…

    Redis 2023年4月12日
    00
  • Vertica和YugabyteDB的区别

    Vertica 是什么? Vertica是一个大数据分析软件,被广泛应用于金融、医疗、零售和电信等领域。它使用高度可伸缩的架构,使其能够处理超大规模数据,提供高性能的查询和分析能力,同时能够在多个节点上进行并行处理。 YugabyteDB 是什么? YugaByteDB是一种开源的分布式SQL数据库,旨在提供一种高度可扩展且容错性强的解决方案。它的设计灵感来…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部