【编程语言】正则表达式:POSIX 与 PCRE 的全面比较及应用
目录
- 正则表达式:POSIX 与 PCRE 的全面比较及应用
- 1. 正则表达式的基本概念
- 1.1 基本元素
- 1.2 正则表达式的历史
- 2. POSIX 正则表达式
- 2.1 POSIX 正则表达式的语法
- 2.1.1 基本正则表达式 (BRE)
- 2.1.2 扩展正则表达式 (ERE)
- 2.2 POSIX 正则表达式的使用场景
- 2.3 使用 POSIX 正则表达式的编程语言
- 3. PCRE 正则表达式
- 3.1 PCRE 正则表达式的语法
- 3.2 PCRE 的高级功能
- 3.3 使用 PCRE 的编程语言
- 3.4 PCRE 正则表达式的使用场景
- 4. POSIX 与 PCRE 的区别
- 4.1 功能区别
- 4.2 性能区别
- 4.3 应用领域
- 4.4 跨平台支持
- 5. 正则表达式的选择:POSIX 还是 PCRE?
- 5.1 选择 POSIX 的场景
- 5.2 选择 PCRE 的场景
- 6. 编程语言中的正则表达式支持
- 6.1 C 语言中的正则表达式
- 6.2 Python 中的正则表达式
- 6.3 JavaScript 中的正则表达式
- 6.4 PHP 中的正则表达式
- 6.5 Java 中的正则表达式
- 7. POSIX 和 PCRE 标准参考
- 7.1 POSIX 正则表达式标准参考
- 7.1.1 IEEE 标准文档
- 7.1.2 The Open Group 网站
- 7.1.3 Unix/Linux 手册页
- 7.2 PCRE 正则表达式标准参考
- 7.2.1 PCRE 官方文档
- 7.2.2 Perl 正则表达式文档
- 7.2.3 编程语言库文档
- 7.2.4 PCRE 库源代码
- 7.3 小结
- 8. 结论
- 9. 结束语
正则表达式:POSIX 与 PCRE 的全面比较及应用
正则表达式(Regular Expression,简称 regex)是计算机科学中的一个重要工具,广泛应用于文本处理、数据解析、字符串匹配等领域。它们可以用来定义复杂的字符串模式,并通过这些模式进行文本搜索、替换和解析。正则表达式的两个主要标准是 POSIX 和 PCRE。本文将全面介绍这两种正则表达式的标准、语法特点、应用场景及其在不同编程语言中的使用情况。
1. 正则表达式的基本概念
正则表达式是用于定义字符串搜索模式的一种语言,它由一组特殊字符和符号构成,用来描述字符串的规则。正则表达式的应用广泛,特别是在文本处理、模式匹配、数据过滤、日志分析等领域。
1.1 基本元素
正则表达式由普通字符和特殊字符构成:
- 普通字符:如字母、数字、标点符号,用于精确匹配这些字符。
- 特殊字符:包括
.
、*
、?
、+
、|
、^
、$
等,用于构建灵活的匹配模式。
例如:
a.b
匹配以 “a” 开头,以 “b” 结尾,中间可以有任意一个字符的字符串。a*b
匹配以 “b” 结尾,且 “b” 之前可以有零个或多个 “a” 的字符串。
1.2 正则表达式的历史
正则表达式最初由数学家 Stephen Kleene 在 1950 年代提出,用于描述有限自动机的行为。随后,它被引入计算机科学,成为 Unix 系统中文本处理工具的一部分。随着编程语言的发展,正则表达式的功能也不断扩展,形成了 POSIX 和 PCRE 两个主要标准。
2. POSIX 正则表达式
POSIX(Portable Operating System Interface)正则表达式是一个历史悠久的标准,最早用于 Unix 系统中的文本处理工具。POSIX 正则表达式分为两类:基本正则表达式(Basic Regular Expression,BRE) 和 扩展正则表达式(Extended Regular Expression,ERE)。这些表达式支持有限的模式匹配功能,主要用于简单的文本处理。
2.1 POSIX 正则表达式的语法
2.1.1 基本正则表达式 (BRE)
基本正则表达式是 POSIX 标准中的简单表达式类型,常用于 grep
等命令。它的语法相对简单:
.
:匹配任意单个字符。*
:匹配前面的字符零次或多次。^
:匹配行首。$
:匹配行尾。\
:用于转义特殊字符。
例如,a.*b
可以匹配 “a” 开头,“b” 结尾的任意字符串。
2.1.2 扩展正则表达式 (ERE)
扩展正则表达式相对于 BRE,增加了更多的操作符,允许更复杂的模式匹配:
+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。|
:表示逻辑或,匹配多个模式中的一个。
例如,a|b
匹配 “a” 或 “b”。
2.2 POSIX 正则表达式的使用场景
POSIX 正则表达式广泛应用于 Unix 系统中的命令行工具中,包括:
- grep:用于搜索文件中的匹配行。
- sed:用于对文本进行流式编辑。
- awk:用于模式扫描和处理语言。
这些工具为 Unix/Linux 用户提供了高效的文本处理方式,适合处理大规模日志、配置文件等。
2.3 使用 POSIX 正则表达式的编程语言
一些编程语言也支持 POSIX 正则表达式:
- C 语言:通过
regex.h
头文件提供 POSIX 标准的正则表达式支持。C 语言中的正则表达式函数如regcomp()
和regexec()
用于编译和执行正则表达式。 - Ruby:Ruby 虽然主要使用 PCRE,但它也兼容 POSIX 标准。
- Perl(早期版本):早期的 Perl 版本与 POSIX 正则表达式兼容,但后来 Perl 开始使用 PCRE。
3. PCRE 正则表达式
PCRE(Perl Compatible Regular Expressions)是 Perl 语言的正则表达式实现,支持更高级的匹配功能。PCRE 被认为是现代正则表达式的标准,因为它引入了更多的特性,适合处理复杂的文本模式。大多数现代编程语言和工具都基于 PCRE 提供正则表达式支持。
3.1 PCRE 正则表达式的语法
PCRE 的语法与 POSIX 类似,但增加了许多高级特性:
- 非贪婪匹配:使用
*?
、+?
、??
等表示最短匹配,而非默认的最长匹配。 - 断言:支持正向断言
(?=...)
和负向断言(?!...)
,用于匹配前后特定条件的文本。 - 回溯引用:支持使用
\1
、\2
等表示之前匹配的捕获组。 - 嵌入条件:支持嵌入条件匹配,如
(?ifthen|else)
。
例如:
(a|b)+
匹配一个或多个 “a” 或 “b”。a(?=b)
匹配 “a” 后面跟着 “b” 的字符串。
3.2 PCRE 的高级功能
- 多行模式:支持在多行文本中进行匹配。
- Unicode 支持:可以匹配 Unicode 字符集,使得 PCRE 能够处理国际化文本。
- 递归匹配:支持递归匹配,使得 PCRE 能够处理嵌套结构的模式。
3.3 使用 PCRE 的编程语言
PCRE 是现代编程语言中广泛使用的正则表达式库,以下是常用的编程语言及其对 PCRE 的支持:
- Perl:PCRE 的发源地,Perl 是处理文本和字符串操作的强大工具,支持完整的正则表达式语法。
- PHP:PHP 使用 PCRE 作为其内置正则表达式库,函数如
preg_match()
和preg_replace()
都基于 PCRE 实现。 - Python:Python 的
re
模块支持与 PCRE 兼容的正则表达式,提供了全面的正则功能。 - JavaScript:JavaScript 的正则表达式语法部分基于 PCRE,实现了许多 PCRE 功能。
- Java:Java 的正则表达式库
java.util.regex
兼容 PCRE 语法。 - C#:C# 的
System.Text.RegularExpressions
命名空间支持 PCRE 风格的正则表达式。 - Go:Go 语言的
regexp
包支持 PCRE 风格的正则表达式。
3.4 PCRE 正则表达式的使用场景
PCRE 正则表达式在以下场景中非常有用:
- Web 开发:PHP、JavaScript 等语言使用正则表达式处理表单验证、数据解析、字符串处理等任务。
- 数据分析:Python 和 R 语言中,正则表达式被广泛用于清理、分析和过滤数据。
- 编辑器搜索替换:许多现代文本编辑器(如 VSCode、Sublime Text)支持基于 PCRE 的正则表达式,用于复杂的文本查找和替换。
- 日志分析和文件处理:Java、Go 等语言使用正则表达式进行复杂的日志分析和文本文件处理。
4. POSIX 与 PCRE 的区别
4.1 功能区别
特性 | POSIX | PCRE |
---|---|---|
匹配模式 | 贪婪匹配(无法使用非贪婪) | 支持贪婪与非贪婪匹配 |
捕获组 | 基础支持 | 强大的捕获组、回溯引用支持 |
断言 | 不支持 | 支持正向和负向断言 |
递归匹配 | 不支持 | 支持递归匹配 |
Unicode 支持 | 部分支持 | 完整支持 Unicode |
多行/单行模式 | 基本支持 | 完整支持多行和单行模式 |
4.2 性能区别
POSIX 和 PCRE 在性能上也有显著的差异,主要体现在以下几个方面:
-
贪婪匹配与非贪婪匹配:POSIX 只支持贪婪匹配,这意味着它会尽可能多地匹配字符,直到不满足条件为止,而 PCRE 支持非贪婪匹配,可以更灵活地控制匹配长度,这在处理复杂字符串时提供了更高的效率。
-
回溯机制:PCRE 使用回溯机制进行复杂模式的匹配,这使得它能够处理递归匹配、捕获组引用等高级功能。而 POSIX 采用的是“最长匹配”策略,寻找所有可能的匹配组合,这在某些场景下会造成性能瓶颈。
-
执行效率:在处理简单的正则表达式时,POSIX 的执行效率可能略高于 PCRE,特别是在文本流处理等基础操作中。但是对于复杂的匹配场景,PCRE 的高级特性使得它更加灵活且更高效。
4.3 应用领域
应用场景 | POSIX | PCRE |
---|---|---|
基础文本处理 | 适用于简单、直接的文本处理 | 更适合复杂的模式匹配和字符串操作 |
命令行工具 | 广泛用于 grep、sed 等命令 | 不太常见于命令行工具中 |
现代编程语言支持 | 较少直接支持 | 广泛应用于现代编程语言 (PHP, Python, JS) |
日志分析与数据解析 | 适用于大规模文本流的分析 | 更适合高复杂度的日志分析和数据解析 |
4.4 跨平台支持
POSIX 标准最初用于 Unix 系统,因此在所有基于 Unix 的系统(如 Linux 和 macOS)中都有良好的支持。然而,PCRE 则因其灵活的特性在现代软件开发中广泛应用,跨平台支持良好。
- POSIX:主要应用于 Unix 系统中,特别是在命令行工具和 C 语言的编程环境中。
- PCRE:在现代软件开发环境(如 Windows、Linux、macOS 等)中被广泛应用,许多编程语言和开发工具都内置或兼容 PCRE。
5. 正则表达式的选择:POSIX 还是 PCRE?
在选择使用 POSIX 还是 PCRE 正则表达式时,开发者需要根据具体的需求和应用场景来做决定:
5.1 选择 POSIX 的场景
POSIX 正则表达式适用于以下情况:
- 简单文本处理任务:如果你只是进行基础的字符串匹配和替换操作,POSIX 是足够的。
- 命令行工具:在 Unix 环境中使用
grep
、sed
等工具时,POSIX 正则表达式是主要选择。 - 嵌入式系统:在需要轻量级、高效的正则表达式支持,且不需要高级特性的环境下,POSIX 可能会提供更好的性能。
5.2 选择 PCRE 的场景
PCRE 正则表达式适用于以下情况:
- 复杂的文本操作:如果需要使用递归匹配、捕获组、断言等高级特性,PCRE 是首选。
- 跨平台开发:如果你需要在多个平台或编程语言之间共享正则表达式逻辑,PCRE 的通用性更强。
- 现代 Web 开发:在 Web 开发中,特别是使用 PHP、Python、JavaScript 等语言时,PCRE 是更广泛和强大的选择。
6. 编程语言中的正则表达式支持
不同的编程语言对 POSIX 和 PCRE 的支持各不相同,以下是主要编程语言中的正则表达式实现概述。
6.1 C 语言中的正则表达式
C 语言主要支持 POSIX 正则表达式,开发者可以通过 regex.h
库使用相关功能。在 C 语言中,正则表达式主要用于高效的文本处理,特别是嵌入式系统、命令行工具等场景。常用的函数包括:
regcomp()
:编译正则表达式。regexec()
:执行正则匹配。regfree()
:释放正则表达式的内存。
虽然 C 语言中的 POSIX 正则表达式功能相对基础,但它在处理简单文本任务时非常高效。
6.2 Python 中的正则表达式
Python 的 re
模块支持 PCRE 语法,提供了丰富的正则表达式功能,包括多行模式、断言、回溯引用等。Python 中常用的正则表达式函数包括:
re.match()
:从字符串的开头开始匹配。re.search()
:搜索整个字符串进行匹配。re.sub()
:替换匹配的字符串。
Python 正则表达式非常适合于数据处理、Web 开发和日志分析等任务。
6.3 JavaScript 中的正则表达式
JavaScript 的正则表达式内置于语言中,并基于 PCRE 语法。常用的正则表达式方法包括:
RegExp.prototype.test()
:测试字符串是否符合模式。String.prototype.match()
:返回匹配结果。String.prototype.replace()
:替换匹配的字符串。
JavaScript 的正则表达式广泛应用于 Web 表单验证、动态内容解析等场景。
6.4 PHP 中的正则表达式
PHP 使用 PCRE 作为其内置的正则表达式引擎。通过 preg_*
系列函数(如 preg_match()
和 preg_replace()
),PHP 提供了灵活且强大的文本处理能力。PHP 的正则表达式在 Web 开发中具有重要地位,用于表单处理、数据验证和字符串解析。
6.5 Java 中的正则表达式
Java 的 java.util.regex
包提供了对 PCRE 语法的支持。Java 正则表达式功能强大,常用于企业应用的日志分析和文本处理。Java 中的常用方法包括:
Pattern.compile()
:编译正则表达式。Matcher.find()
:查找匹配项。Matcher.group()
:提取匹配组。
Java 的正则表达式在大规模文本处理和复杂数据解析中表现出色。
7. POSIX 和 PCRE 标准参考
正则表达式在计算机系统中的使用有两种主要的实现标准:POSIX 正则表达式和PCRE(Perl Compatible Regular Expressions)。这两种标准虽然广泛应用于不同的操作系统和编程语言中,但它们的具体规范有所不同。本节将详细说明如何查阅和使用这两种标准。
7.1 POSIX 正则表达式标准参考
POSIX 正则表达式属于 POSIX.2 标准,由 **IEEE(电气和电子工程师协会)**定义,用于 Unix 系统和兼容系统中的正则表达式规范。该标准主要为文本处理工具(如 grep
、sed
、awk
)定义了基础正则表达式(BRE)和扩展正则表达式(ERE)两种形式。要参考 POSIX 正则表达式的标准,可以通过以下途径获取资料:
7.1.1 IEEE 标准文档
- 标准名称:IEEE Std 1003.1-2024(POSIX.1 标准)。POSIX.2 标准属于此系列的一部分。
- 获取途径:
- IEEE Xplore:该平台提供了 POSIX 标准的官方文档,可以通过以下链接获取相关标准:IEEE Xplore POSIX 标准。
7.1.2 The Open Group 网站
- POSIX 标准由 The Open Group 负责维护和发布,您可以通过其网站免费在线参考 POSIX 基础规范:
- The Open Group Base Specifications Issue 7 (POSIX.1-2024) 提供了在线访问权限,您可以查阅详细的正则表达式语法和规则。
7.1.3 Unix/Linux 手册页
- 如果使用 Unix 或 Linux 系统,您可以通过手册页(如
man regex
、man 7 regex
)直接查阅 POSIX 正则表达式规范,这些文档详细描述了 BRE 和 ERE 的具体语法、规则和用法。
7.2 PCRE 正则表达式标准参考
PCRE 是与 Perl 正则表达式语法兼容的一种库实现,广泛应用于各种编程语言中。PCRE 没有国际标准化组织定义的标准,但基于 Perl 5 的正则表达式语法,它被业界广泛接受为事实上的标准。以下是获取 PCRE 正则表达式规范的主要参考途径:
7.2.1 PCRE 官方文档
- PCRE 库 是最权威的 PCRE 正则表达式实现,其官方文档详细描述了 PCRE 的语法、特性和使用方法:
- PCRE 官方文档 提供了 PCRE 最新的语法和匹配行为说明。
7.2.2 Perl 正则表达式文档
- PCRE 的主要参考源是 Perl 5 中的正则表达式语法。您可以通过以下文档获取 Perl 正则表达式的详细规范:
- Perl Regular Expression Documentation 提供了 Perl 正则表达式的官方文档,详细解释了各种语法规则和特性。
7.2.3 编程语言库文档
- 许多编程语言(如 PHP、Python、JavaScript)都采用 PCRE 或类似的正则表达式库作为其标准正则表达式实现。以下是几种流行编程语言的文档链接:
- PHP: PHP 使用 PCRE 库作为其正则表达式引擎,参考:PHP PCRE 函数。
- Python: Python 的
re
模块基于 PCRE,文档链接:Python re 模块。 - JavaScript: JavaScript 的正则表达式语法与 PCRE 相近,参考:MDN JavaScript 正则表达式。
7.2.4 PCRE 库源代码
- PCRE 库的源代码是深入了解其实现原理的重要资源,您可以从以下 GitHub 仓库获取:
- PCRE GitHub 仓库 提供了 PCRE 库的最新源代码及其相关文档。
7.3 小结
- POSIX 正则表达式 有明确的标准,由 IEEE 发布的 POSIX.2(IEEE 1003.2)标准文件规范了基础和扩展正则表达式。
- PCRE 正则表达式 没有正式的国际标准,但基于 Perl 5 正则表达式语法,已成为广泛使用的行业标准。PCRE 的规范可参考其官方文档及 Perl 文档。
通过这些参考资料,您可以深入了解 POSIX 和 PCRE 正则表达式的规范,并应用于相应的开发场景。
8. 结论
正则表达式是强大的文本处理工具,POSIX 和 PCRE 作为两种主要的正则表达式标准,分别在不同的场景中有着广泛的应用。POSIX 正则表达式适用于简单、高效的文本匹配任务,而 PCRE 提供了更强大和灵活的功能,适合复杂的字符串操作。
在编程语言和应用领域中,PCRE 正则表达式得到了更多的支持和应用,特别是在现代 Web 开发、数据分析和日志处理等方面。POSIX 则在 Unix 系统的命令行工具和嵌入式开发中依然发挥着重要作用。
选择合适的正则表达式标准,取决于具体的需求和使用场景。在处理简单任务时,POSIX 是轻量且高效的选择,而在需要高级功能时,PCRE 能够提供强大的支持。
9. 结束语
- 本节内容已经全部介绍完毕,希望通过这篇文章,大家对正则表达式有了更深入的理解和认识。
- 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️
相关文章:

【编程语言】正则表达式:POSIX 与 PCRE 的全面比较及应用
目录 正则表达式:POSIX 与 PCRE 的全面比较及应用1. 正则表达式的基本概念1.1 基本元素1.2 正则表达式的历史 2. POSIX 正则表达式2.1 POSIX 正则表达式的语法2.1.1 基本正则表达式 (BRE)2.1.2 扩展正则表达式 (ERE) 2.2 POSIX 正则表达式的使用场景2.3 使用 POSIX …...

Spark Streaming 数据流处理
一、创建Spark Streaming 环境 二、读取数据(监听端口) 三、任务处理 四、启动程序 我这里写的是简单的单词数量统计 import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream} import org.apache.spark.{SparkConf, SparkConte…...

高效规划神器 markmap:一键将 Markdown 变思维导图!
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 微信公众号|搜一搜&…...

微服务基础架构(图)
微服务基础架构是一种现代化的软件架构模式,旨在将大型复杂的应用程序拆分为多个小型、独立的服务。每个微服务专注于特定的业务功能,可独立开发、部署和扩展。 在微服务基础架构中,通常会使用轻量级的通信机制,如 RESTful API 或…...

中电金信:大模型时代 金融机构企业架构转型如何更智能化?
随着人工智能技术的不断进步,AI大模型在金融行业已经广泛应用,推动金融机构实现更高效、智能化的服务,同时也为金融科技领域的发展带来新的挑战。中电金信基于业务建模的企业架构转型解决方案也顺势而动,关注大模型在具体场景上的…...

基于CRNN模型的多位数字序列识别的应用【代码+数据集+python环境+GUI系统】
基于CRNN模型的多位数字序列识别的应用【代码数据集python环境GUI系统】 基于CRNN模型的多位数字序列识别的应用【代码数据集python环境GUI系统】 背景意义 多位手写数字识别,即计算机从纸张文档、照片、触摸屏等来源接收并解释可理解的手写数字输入的能力。 随着…...

windows中命令行批处理脚本学习
目录 一 基础知识二 常见命令1. 输出 echo2. 注释 rem .... %...% :: goto if (10) ()3. 变量 set4. 获取参数 %数字 %*5. 退出 exit6. 复制 copy7.读取输出文件内容 type8. 帮助 命令xxx /?9.等待当前命令运行结束后,才执行下一条命令 call10. 修改字体编码 chcp11. 特殊变量…...

版本工具报错:Error Unity Version Control
NotConfiguredClientException: Unity VCS client is not correctly configured for the current user:Client config file....

ECharts饼图-饼图标签对齐,附视频讲解与代码下载
一、图表效果预览 引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外&#…...

Python实现基于WebSocket的stomp协议调试助手工具分享
stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多…...

《语音识别方案选型研究》
《语音识别方案选型研究》 一、引言二、语音识别技术概述(一)语音识别的基本原理(二)语音识别技术的发展历程 三、语音识别方案的分类(一)基于云端的语音识别方案(二)基于本地的语音…...

解决关于HTML+JS + Servlet 实现前后端请求Session不一致的问题
1、前后端不分离情况 在处理session过程中,如果前后端项目在一个容器中,session是可以被获取的。例如如下项目结构: 结构 后端的代码是基本的设置值、获取值、销毁值的内容: 运行结果 由此可见,在前后统一的项目中&a…...

ECharts饼图-饼图34,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详…...

如何实现安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯
在工业自动化中,实现不同品牌、不同型号设备之间的通讯是确保生产流程顺畅、高效运行的关键。本文详细介绍了安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯的具体方法。 一.软硬件需求 1.一台安川MP3300CPU301,其IP地址是192.…...

react18中如何实现同步的setState来实现所见即所得的效果
在react项目中,实现添加列表项,最后一项自动显示在可视区域范围!! 实现效果 代码实现 import { useState, useRef } from "react"; import { flushSync } from "react-dom"; function FlushSyncRef() {con…...

深入理解MVP架构模式
引言 MVP(Model-View-Presenter,模型-视图-提供者)是一种广泛应用于软件开发中的架构模式,是经典MVC(Model-View-Controller)的变种。在传统的MVC模式中,Model和View之间存在直接的依赖和数据交…...

Java面试题七
一、Java中的集合框架是如何组织的?列举几个常用的集合类。 Java中的集合框架是一个设计用来存储和操作对象集合的统一架构。它主要由两大接口派生出来:Collection和Map。这两个接口及其子接口和实现类共同构成了Java集合框架的主体。 集合框架的组织结…...

linux网络编程3——http服务器的实现和性能测试
http服务器的实现 本文使用上一篇博文实现的epollreactor百万并发的服务器实现了一个使用http协议和WebSocket协议的WebServer。 完整代码请看我的github项目 1. 水平触发(Level Trigger)与边沿触发(Edge Trigger) 1.1 水平触发 水平触发是一种状态驱动机制。当文件描述符&a…...

Docker部署Kamailio,并使用LinPhone实现网络通话
前提条件 准备一个路由器,一个服务器,两个终端设备(手机或电脑) docker部署安装 我使用的是windows系统,docker desktop 先启动Docker desktop打开cmd,输入docker命令docker run --name kamailio --rm…...

JAVA-石头迷阵小游戏
采用企业式项目结构,接下来我将分享全部代码和结构,希望大家点点关注! 这是我的结构。首先使用IDE创建一个Module,命名stone-maze,接着把自带src下的main方法删除,接着在src下创建包,包名为com.wmuj,接着创建APP类代码如下: package com.wmuj;public class App {publ…...

鸿蒙--进度条通知
主要介绍如何使用通知能力和基础组件,实现模拟下载文件,发送通知的案例。 效果 代码结构 ├──entry/src/main/ets // 代码区 │ ├──common │ │ ├──constants │ │ │ └──CommonConstants.ets // 公共常量类 │ │ └──utils │ │ ├──Logger.ets //…...

搜维尔科技:varjo xr-4开箱测评,工业用途头显,一流视觉保真度
varjo xr-4开箱测评,工业用途头显,一流视觉保真度 搜维尔科技:varjo xr-4开箱测评,工业用途头显,一流视觉保真度...

mysql数据量分库分表
一、分库分表参考阈值 分库分表是解决大规模数据和高并发访问问题的常用策略。虽然没有绝对的阈值来决定何时进行分库分表,但以下是一些参考阈值和考虑因素,可以帮助你做出决策: 1.1 数据量阈值 单表数据行数:当单表的数据行数…...

Vite创建Vue3项目以及Vue3相关基础知识
1.创建Vue3项目 1.运行创建项目命令 # 使用 npm npm create vitelatest2、填写项目名称 3、选择前端框架 4、选择语法类型 5、按提示运行代码 不出意外的话,运行之后应该会出现 下边这个页面 6.延伸学习:对比webpack和vite(这个是面试必考…...

Elasticsearch封装公共索引增删改查
什么是索引? 定义:索引是 Elasticsearch 中用于存储数据的逻辑命名空间。它由多个文档组成,每个文档是一个 JSON 格式的结构化数据对应关系:在关系数据库中,索引类似于表;而在 Elasticsearch 中࿰…...

Python异常检测:Isolation Forest与局部异常因子(LOF)详解
这里写目录标题 Python异常检测:Isolation Forest与局部异常因子(LOF)详解引言一、异常检测的基本原理1.1 什么是异常检测?1.2 异常检测的应用场景 二、Isolation Forest2.1 Isolation Forest的原理2.1.1 算法步骤 2.2 Python实现…...

Git的原理和使用(二)
1. git的版本回退 之前我们也提到过,Git 能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现 之前前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本 回退的功能…...

docker 发布镜像
如果要推广自己的软件,势必要自己制作 image 文件。 1 制作自己的 Docker 容器 基于 centos 镜像构建自己的 centos 镜像,可以在 centos 镜像基础上,安装相关的软件,之后进行构建新的镜像。 1.1 dockerfile 文件编写 首先&…...

投了15亿美元,芯片创新公司Ampere为何成了Oracle真爱?
【科技明说 | 科技热点关注】 一个数据库软件公司却想要操控一家芯片厂商,这样的想法不错。也真大胆。 目前,全球数据库巨头甲骨文Oracle已经持有Ampere Computing LLC 29%的股份,并有可能通过未来的投资选择权获得对这家芯片制造…...

vue 报告标题时间来自 elementUI的 el-date-picker 有开始时间和结束时间
要在Vue中使用 Element UI 的 el-date-picker 来选择开始时间和结束时间,并将其展示在报告中,以下是详细的实现步骤。 实现思路: 使用 Element UI 的 el-date-picker 组件,让用户选择时间范围(开始时间和结束时间&am…...