c语言正则表达式_关于正则表达式,这篇都讲清楚了

本文详细介绍了正则表达式的起源、语法和匹配原理,重点探讨了DFA和NFA两种引擎的工作方式以及回溯的概念。通过实例解析,帮助读者深入理解正则表达式的运用,并推荐了相关书籍、博客和在线测试工具。

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

9c4480c93a3f9d8a776d04b756334983.gif 852d7d802a7eb6e8ef7554de1d8525ef.png 作者 | 猪哥 来源 | 裸睡的猪(ID:rgznai100) 目前越来越多的网站、编辑器、编程语言都已支持一种叫“ 正则表达式 ”的字符串查找“公式”,有过编程经验的同学都应该了解 正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
使用正则表达式去匹配字符串Hello World 中的 Hello
伪代码:/Hello/, "Hello World"
输出:Hello
如何写好一篇关于  正则表达式 的文章,我思考了一周的时间,从未有一篇文章能让猪哥如此费神。 因为我觉得 正则表达式 :难记忆、难描述、广而深且不受重视,有人说正则表达式既好写也难写!
  1. 好写:无非写一些常用、实用的案例,说实话你们每个人都能写出这种:在网上百度一下然后结合一点自己的实际经验,一篇文章就出来了。

  2. 难写:很多人都认为正则简单,不用记,要用就百度一下。但是绝大多数人了解的只是正则的一个小面,真正的精髓却很少关注!

希望大家能知道正则的知识点其实非常非常多,尤其是 正则引擎执行原理以及正则优化 ,这算是正则表达式的进阶知识点,面试中也可能会被问到。 1a413ce1d7aa7c0508ad0e72aa521d62.png

027cd65ad8f0b744352430ffef5fd3ef.png

起源与发展

我们在学习一门技术的时候有必要了解其起源与发展过程,这对我们去理解技术本身有一定的帮助! 20世纪40年代:正则表达式最初的想法来自两位神经学家:沃尔特·皮茨与麦卡洛克,他们研究出了一种用数学方式来描述 神经网络的模型。 1956年:一位名叫Stephen Kleene的数学科学家发表了一篇题目是《神经网事件的表示法》的论文,利用称之为 正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“ 正则表达式”这个术语。 1968年:C语言之父、UNIX之父 肯·汤普森把这个“正则表达式”的理论成果用于做一些搜索算法的研究,他描述了一种正则表达式的编译器,于是出现了应该算是最早的正则表达式的编译器qed(这也就成为后来的grep编辑器)。 Unix使用正则之后,正则表达式不断的发展壮大,然后大规模应用于各种领域,根据这些领域各自的条件需要,又发展出了许多版本的正则表达式,出现了许多的分支。我们把这些分支叫做“ 流派”。 1987年:Perl语言诞生了,它综合了其他的语言,用正则表达式作为基础,开创了一个新的流派, Perl流派。之后很多编程语言如: Python、Java、Ruby、.Net、PHP等等在设计正则式支持的时候都参考Perl正则表达式。
<think>嗯,用户想了解用于网络安编程的最佳编程语言。我需要根据提供的引用资料来整理答案。首先,引用[1]提到了适合攻击的5种最佳编程语言,但用户更关注的是网络安,也就是防御方面。不过可能这些语言在攻击和防御中都有应用。引用[2]明确指出C语言用于加密、图像处理和套接字网络,这对网络安很重要。然后引用[4]提到PHP结合JavaScript可以保护Web应用,而引用[5]提到Java在企业级应用中的稳定性。此外,引用[3]讲的是编程语言的发展史,可能不太相关,但高级语言的使用趋势可能有帮助。 需要确定每个语言的具体应用场景。比如C语言因为接近硬件,适合处理底层任务,如加密算法和网络包分析。Python因为易用性和丰富的库,适合快速开发安工具。JavaScript和PHP在Web安方面比较关键,比如防范XSS和SQL注入。Java在企业环境中应用广泛,特别是在大型系统中需要安稳定的环境。Go语言可能在高并发网络服务中有优势,适合构建安的服务器应用。 同时要注意引用资料的来源,确保准确引用。例如,引用[2]提到C语言用于加密和套接字网络,引用[4]提到PHP和JavaScript用于Web应用安,引用[5]说明Java在企业中的稳定性。需要将这些点整合到各个语言的描述中,并添加引用标识。 另外,用户可能想知道为什么这些语言适合网络安,所以每个语言的优点和典型应用需要说明清楚。比如Python的库像Scapy、Requests,C语言在Snort中的应用,JavaScript的漏洞检测等。还要考虑用户可能的后续问题,比如学习资源、实际案例或者如何结合多种语言使用,所以在相关问题里可以包括这些方向。 最后,确保回答结构清晰,分点列出每个语言,并附上代码示例,比如用Python演示端口扫描,用JavaScript展示输入过滤。代码格式要正确,使用$$...$$包围独立公式,行内公式用$...$。同时,生成的相关问题要覆盖性能分析、优化方法、应用场景等,但根据用户的问题,可能需要调整相关问题,比如不同语言的适用场景、学习路径或实际案例。</think>根据网络安领域的技术需求和行业实践,推荐以下5种核心编程语言及其应用场景: ### 一、C语言(系统级安开发) $C$语言可直接操作内存和硬件,适合开发底层安工具: ```c // 实现基础的网络包过滤逻辑 if (packet->protocol == TCP && packet->dest_port == 80) { analyze_http_payload(packet); } ``` 特点: - 开发入侵检测系统(如Snort)[^2] - 编写加密算法实现(如OpenSSL底层模块) - 操作系统内核安模块开发 ### 二、Python(渗透测试与自动化) $Python$的丰富库支持快速原型开发: ```python import scapy.all as scapy # 简易端口扫描器 def port_scan(target): ans = scapy.sr1(scapy.IP(dst=target)/scapy.TCP(dport=80,flags="S")) if ans.haslayer(scapy.TCP): return "开放" if ans.getlayer(scapy.TCP).flags == 0x12 else "关闭" ``` 优势: - Requests库实现Web漏洞探测 - Scapy构建自定义网络工具 - 机器学习在威胁检测中的应用 ### 三、JavaScript(Web安防护) 前端安防护关键语言: ```javascript // XSS防护过滤器 function sanitizeInput(input) { return input.replace(/<script.*?>.*?<\/script>/gi, ''); } ``` 应用场景: - 客户端输入验证(正则表达式复杂度$O(n)$) - CSP策略实施 - Web应用防火墙规则开发 ### 四、Java(企业级安架构) 企业环境安方案首选: $$JVM\ 安模型:SecurityManager + Policy文件$$ 典型应用: - 金融系统加密通信(TLS 1.3实现) - 基于Spring Security的权限控制 - Android应用安加固 ### 五、Go语言(云原生安) 高并发网络防护工具开发: ```go func main() { ln, _ := net.Listen("tcp", ":443") defer ln.Close() for { conn, _ := ln.Accept() go handleTLS(conn) // 协程处理连接 } } ``` 优势: - 内存安特性(避免缓冲区溢出) - 高性能TLS终端开发 - 容器安监控系统构建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值