正则表达式(.*?)惰性匹配()

本文详细介绍了正则表达式的高级用法,包括匹配任意非换行符字符、非贪婪匹配、预查(正向肯定、否定预查及反向预查)等概念,并提供了一个实例展示了如何使用正则表达式验证6位字符串的格式要求。通过这些知识,读者可以更精确地控制字符串匹配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、. 匹配任意除换行符“\n”外的字符;
2、表示匹配前一个字符0次或无限次;
3、?表示前边字符的0次或1次重复
4、+或
后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复;
5、 .? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
如:a.
?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。

(?:pattern)
非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

    var a = /^(?=.*[a-z])(?=(?:.*?[A-Z]){2})(?=.*\d)[a-zA-Z\d]{6}$/;

一共6位至少一个小写字母一个数字两个大写字母

### 正则表达式 `<a[^>]+href=['"](.*?)['"]` 的含义和匹配规则 该正则表达式的目的是用于提取 HTML 中 `<a>` 标签内的 `href` 属性值。以下是对其结构的逐步解析: #### 1. **整体结构** - 表达式的目标是从 HTML 文本中找到形如 `<a href="链接">` 或 `<a class="..." href='链接'>` 这样的模式,并从中提取出 `href` 属性的具体值。 --- #### 2. **各部分详解** - **`<a`**: 匹配字符串中的 `<a` 部分,表示目标是一个 `<a>` 开始的标签[^1]。 - **`[^>]+`**: `[ ]` 定义了一个字符集,其中 `^>` 表示除了右尖括号 `>` 外的任何字符。因此,这部分会匹配紧随 `<a` 后面的一系列字符,直到遇到第一个 `>` 前停止。这一步的作用是为了跳过可能存在的其他属性(例如 `class`, `id` 等),并确保不会提前结束匹配[^2]。 - **`href=`**: 明确指出接下来要寻找的是 `href` 属性及其赋值符号 `=`。 - **`['"]`**: 使用方括号定义一个字符类,包含两种可能性:单引号 `'` 和双引号 `"`。这意味着 `href` 的值可以由这两种方式包裹[^3]。 - **`(.*?)`**: 圆括号 `( )` 创建了一个捕获组,用于保存匹配到的结果。内部的 `.` 是通配符,代表任意字符;而 `*?` 则是一种惰性量词,表示尽可能少地匹配字符,直至满足后续条件为止。这种组合非常适合于获取引号之间的内容[^3]。 - **`['"]`**: 再次指定闭合的引号形式,需与开头一致,即要么都是单引号,要么都是双引号。 --- ### 示例代码 以下是一段 Python 实现此正则表达式的代码片段: ```python import re html_content = '<a href="https://example.com" title="Example Link">' pattern = r'<a[^>]+href=(["\'])(.*?)\1' matches = re.findall(pattern, html_content) for match in matches: print(f"Matched URL: {match[1]}") ``` 运行结果将是: ``` Matched URL: https://example.com ``` --- ### 总结 通过上述分析可知,该正则表达式的核心功能在于精准定位 HTML 文件里所有的超链接地址 (`href`) 并将其提取出来。它利用了多种高级特性,包括但不限于非贪婪匹配、转义处理以及边界界定等技术手段来达成目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值