news 2026/4/22 22:26:32

Java——正则表达式详解_java正则表达式,零基础入门到精通,收藏这篇就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java——正则表达式详解_java正则表达式,零基础入门到精通,收藏这篇就够了
目录
  • Java正则表达式
    • 1、正则表达式语法
      • 1.1、基本的元字符
      • 1.2、数量元字符
      • 1.3、位置元字符
      • 1.4、特殊字符元字符
      • 1.5、回溯引用和前后查找
      • 1.6、大小写转换
      • 1.7、匹配模式
    • 2、Java中的正则表达式
      • 2.1、概述
      • 2.2、获取匹配位置
      • 2.3、捕获组
    • 3、匹配单个字符
      • 3.1、匹配纯文本
      • 3.2、匹配任意字符
      • 3.3、匹配特殊字符
    • 4、匹配一组字符
      • 4.1、匹配多个字符中的某一个
      • 4.2、利用字符集合区间
      • 4.3、取非匹配
    • 5、使用元字符
      • 5.1、对特殊字符进行转义
      • 5.2、匹配空白字符
      • 5.3、匹配特定的字符类别
    • 6、重复匹配
      • 6.1、有多少个匹配
      • 6.2、匹配的重复次数
      • 6.3、防止过度匹配
    • 7、位置匹配
      • 7.1、单词边界
      • 7.2、字符串边界
      • 7.3、分行匹配模式
    • 8、使用子表达式
      • 8.1、子表达式
      • 8.2、子表达式的嵌套
    • 9、回溯引用
      • 9.1、回溯引用匹配
      • 9.2、回溯引用在替换操作中的应用
      • 9.3、大小写转换
    • 10、前后查找
      • 10.1、向前查找
      • 10.2、向后查找
      • 10.3、向前查找和向后查找结合起来
      • 10.4、对前后查找取非

Java正则表达式

1、正则表达式语法

1.1、基本的元字符
元字符说明
.匹配任意单个字符
``
[]匹配字符集合中的一个字符
[^]对字符集合求非
-定义一个区间(例如[A-Z])
\对下一个字符转义
1.2、数量元字符
元字符说明
*匹配前一个字符(子表达式)的零次或多次重复(默认贪婪匹配)
*?*的懒惰匹配版本
+匹配前一个字符(子表达式)的一次或多次重复(默认贪婪匹配)
+?+的懒惰匹配版本
?匹配前一个字符(子表达式)的零次或一次重复
{n}匹配前一个字符(子表达式)的n次重复
{m, n}匹配前一个字符(子表达式)至少m次且至多n次重复
{n, }匹配前一个字符(子表达式)n次或更多次重复
{n, }?{n, }的懒惰匹配版本
1.3、位置元字符
元字符说明
^匹配字符串的开头
\A匹配字符串的开头
$匹配字符串的结束
\Z匹配字符串的结束
\<匹配单词的开头
\>匹配单词的结束
\b匹配单词边界(开头和结束)
\B\b的反义
1.4、特殊字符元字符
元字符说明
[\b]退格字符
\c匹配一个控制字符
\d匹配任意数字字符
\D\d的反义
\f换页符
\n换行符
\r回车符
\s匹配一个空白字符
\t制表符(Tab字符)
\v垂直制表符
\w匹配任意字母数字字符或下划线字符
\W\w的反义
\x匹配一个十六进制数字
\0匹配一个八进制数字
1.5、回溯引用和前后查找
元字符说明
()定义一个子表达式
\1匹配第1个子表达式:\2表示第2个子表达式,以此类推
?=向前查找
?<=向后查找
?!负向前查找
?<!负向后查找
?()条件(if then)
`?()`
1.6、大小写转换
元字符说明
\E结束\L或\U转换
\l把下一个字符转换位小写
\L把后面的字符转换位小写,直到遇见\E为止
\u把下一个字符转换位大写
\U把后面的字符转换位大写,直到遇到\E为止
1.7、匹配模式
元字符说明
(?m)分行匹配模式
(?i)忽略大小写
(?d)Unix行模式
(?x)注释模式
(?s)dotall模式
(?u)将以与Unicode标准一致的方式进行大小写不敏感匹配

2、Java中的正则表达式

2.1、概述

Java对正则表达式的支持是从1.4版本开始的,此前的JRE版本不支持正则表达式。

Java语言中的正则表达式匹配功能主要是通过java.util.regex.Matcherjava.util.regex.Pattern类实现的。

Matcher类提供如下几个常用方法:

Pattern类提供如下几个常用方法:

Java正则表达式支持与Perl语言基本兼容,但要注意以下几点:

2.2、获取匹配位置

Matcher类提供了如下方法以获取匹配的位置:

String content = "hello edu jack tom hello smith hello fff"; String reg = "hello"; Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern.matcher(content); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { System.out.println("============="); System.out.println(matcher.start()); System.out.println(matcher.end()); matcher.appendReplacement(buffer, "###"); } matcher.appendTail(buffer); System.out.println(buffer.toString()); // ============= // 0 // 5 // ============= // 19 // 24 // ============= // 31 // 36 // ### edu jack tom ### smith ### fff
2.3、捕获组

非命名捕获 (pattern)
捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。

String content = "hanshunping s7789 nn1189han"; String regStr = "(\\d\\d)(\\d\\d)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); System.out.println(matcher.group(2)); } // 7789 // 77 // 89 // 1189 // 11 // 89

命名捕获 (?pattern)
将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何符号,并且不能以数字开头。可以使用单引号代替尖括号。例如:(?'name')

String content = "hanshunping s7789 nn1189han"; String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); System.out.println(matcher.group("g1")); System.out.println(matcher.group("g2")); } // 7789 // 77 // 89 // 1189 // 11 // 89

非捕获匹配 (?:pattern)
匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储以后使用的匹配。这对于用"or"字符(|)组合模式部件的情况很有用。例如,'industr(?:y|ies)'是比’industry|industries’更经济的表达式。

String content = "hello韩顺平教育 jack韩顺平老师 韩顺平同学hello"; String regStr = "韩顺平(?:教育|老师|同学)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误,并不会捕获分组 } // 韩顺平教育 // 韩顺平老师 // 韩顺平同学

非捕获匹配 (?=pattern)
它是一个非捕获匹配。例如,'Windows(?=95|98|NT|2000)'匹配"Windows 2000"中的"Windows",但是不匹配"Windows 3.1"中的"Windows"。

String content = "Windows2000 Windows3.1"; String regStr = "Windows(?=95|98|NT|2000)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误,并不会捕获分组 } String res = matcher.replaceAll("@@@@@"); System.out.println(res); // Windows // @@@@@2000 Windows3.1

非捕获匹配 (?!pattern)
该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。它是一个非捕获匹配。例如,'Windows (?!95|98|NT|2000)'匹配"Windows 3.1"中的"Windows",但是不匹配"Windows 2000"中的"Windows"。

String content = "Windows2000 Windows3.1"; String regStr = "Windows(?!95|98|NT|2000)"; Pattern pattern = Pattern.compile(regStr); Matcher matcher = pattern.matcher(content); while (matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1));//错误,并不会捕获分组 } String res = matcher.replaceAll("@@@@@"); System.out.println(res); // Windows // Windows2000 @@@@@3.1

3、匹配单个字符

3.1、匹配纯文本

有多个匹配结果,使用全局匹配:

字母大小写,使用i标志忽略大小写:

String str = "Hello, my name is Ben. \n" + "Please visit my website at http:www.baidu.com."; //全局匹配 String pattern = "my"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); } //忽略大小写 pattern = "h"; r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }
3.2、匹配任意字符

使用.匹配任意字符:

3.3、匹配特殊字符

使用\转义字符:

4、匹配一组字符

4.1、匹配多个字符中的某一个

4.2、利用字符集合区间

字符区间并不仅限于数字,以下这些都是合法的字符区间:

4.3、取非匹配

集合中使用^

5、使用元字符

5.1、对特殊字符进行转义

5.2、匹配空白字符
元字符说明
[\b]回退(并删除)一个字符(Backsace键)
\f换页符
\n换行符
\r回车符
\t制表符(Tab键)
\v垂直制表符

5.3、匹配特定的字符类别
元字符说明
\d任何一个数字字符(等价于[0-9]
\D任何一个非数字字符(等价于[^0-9]


元字符说明
\w任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_]
\W任何一个非字母数字或非下划线字符(等价于[^a-zA-Z0-9_]

元字符说明
\s任何一个空白字符(等价于[\f\n\r\t\v]
\S任何一个非空白字符(等价于[^\f\n\r\t\v]

匹配十六进制(\x前缀)或八进制数值(\0前缀):


\x0A对应于ASCII字符10(换行符),其效果等价于\n

6、重复匹配

6.1、有多少个匹配

使用+,匹配一个或多个字符:

使用*,匹配零个或多个字符:

使用?,匹配零个或一个字符:

6.2、匹配的重复次数

使用{n},位重复匹配次数设定一个精确的值:

使用{m, n},位重复匹配次数设定一个区间:

使用{m,},匹配"至少重复多少次":

6.3、防止过度匹配
贪婪型元字符懒惰型元字符
**?
++?
{n,}{n,}?

贪婪匹配的结果,将第一个B标签的开头和第二个B标签的结尾匹配为一对:

懒惰匹配的结果:

String str = "This offer is not available to customers living in <B>AK</B> and <B>HI</B>."; //贪婪匹配 String pattern = "<[Bb]>.*</[Bb]>"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); } //懒惰匹配 pattern = "<[Bb]>.*?</[Bb]>"; r = Pattern.compile(pattern); m =r.matcher(str); while (m.find()) { System.out.println(m.group()); }

7、位置匹配

7.1、单词边界

使用\b来匹配一个单词的开始或结尾:

使用\B表明不匹配一个单词边界:

7.2、字符串边界

使用^匹配字符串的开头,$匹配字符串的结尾:

7.3、分行匹配模式

使用(?m)启用分行匹配模式:

String str = "aaa\n" + "aba\n" + "aca\n" + "bab\n" + "cac"; String pattern = "(?m)^a.*a$"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }

8、使用子表达式

8.1、子表达式

子表达式是一个更大的表达式的一部分;把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当作一个独立元素来使用。子表达式必须用()括起来。

8.2、子表达式的嵌套
String str = "Pinging hog.forta.com [12.159.46.200] with 32 bytes of data:"; String pattern = "(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }

9、回溯引用

9.1、回溯引用匹配

使用\n来引用模式里的子表达式(\1表示第一个子表达式,\2表示第二个子表达式;依次类推):

String str = "This is a block of of text,\n" + "several words here are are\n" + "repeated, and and they\n" + "should not be."; String pattern = "[ ]+(\\w+)[ ]\\1"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }
9.2、回溯引用在替换操作中的应用

替换操作需要用到两个正则表达式:一个用来给出搜索模式,另一个用来给出匹配文本的替换模式。回溯引用可以跨模式使用,在第一个模式里被匹配的子表达式可以用在第二个模式里。

匹配到了邮箱地址,先把邮箱地址放在A标签中:

# 替换,$1引用子表达式 <a herf="mailto:$1">$1</a>

结果:

Hello, <a herf="mailto:ben@forta.com">ben@forta.com</a> is my email address.

Java实现:

String str = "Hello, ben@forta.com is my email address."; String pattern = "(\\w+[\\w\\.]*@[\\w\\.]+\\.\\w+)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); String res = m.replaceAll("<a herf=\"mailto:$1\">$1</a>"); System.out.println(res);//Hello, <a herf="mailto:ben@forta.com">ben@forta.com</a> is my email address.
9.3、大小写转换
元字符说明
\E结束\L或\U转换
\l把下一个字符转换位小写
\L把后面的字符转换位小写,直到遇见\E为止
\u把下一个字符转换位大写
\U把后面的字符转换位大写,直到遇到\E为止

把一级标题中的文本转换为大写:

替换:

$1\U$2\E$3

结果:

<BODY> <H1>WELCOME TO MY HOMEPAGE</H1> <H2>Coldfusion</H2> <H2>Wireless</H2> <H2>This is not valid HTML</H3> </BODY>

注意:Java并不支持此种大小写转换!

10、前后查找

10.1、向前查找

向前查找指定了一个必须匹配但不在结果中返回的模式。向前查找实际就是一个子表达式,而且从格式上看也确实如此。从语法上看,一个向前查找模式其实就是一个以?=开头的子表达式,需要匹配的文本跟在=的后面。


在上面列出的URL地址里,协议名与主机名之间以一个分隔。模式.+匹配任意文本(第1个匹配是http),子表达式(?=:)匹配。注意,被匹配到的并没有出现在最终的匹配结果里;我们用?=向正则表达式引擎表明:只要找到就行了,不要把它包括在最终的匹配结果里,用术语来说,就是“不消费”它。

String str = "http://www.forta.com/\n" + "https://mail.forta.com/\n" + "ftp://ftp.forta.com/"; String pattern = ".+(?=:)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }
10.2、向后查找

正如你刚看到的那样,?=将向前查找(查找出现在被匹配文本之后的字符,但不消费那个字符)。因此,?=被称为向前查找操作符。除了向前查找,许多正则表达式实现还支持向后查找,也就是查找出现在被匹配文本之前的字符(但不消费它),向后查找操作符是?<=

?<=?=的具体使用方法大同小异;它必须用在一个子表达式里,而且后跟要匹配的文本。

String str = "ABC01: $23.45\n" + "HGG42: $5.31\n" + "CFMX1: $899.00\n" + "XTC99: $68.96\n" + "Total items found: 4"; String pattern = "(?<=\\$)[0-9.]+"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); } // 23.45 // 5.31 // 899.00 // 68.96

(?<=\$)只匹配$,但不消费它;最终的匹配结果里只有价格数字,没有前缀$字符。

10.3、向前查找和向后查找结合起来
String str = "<HEAD>\n" + "<TITLE>Ben Forta's Homepage</TITLE>\n" + "</HEAD>"; String pattern = "(?<=<[tT][iI][tT][lL][eE]>).*(?=</[tT][iI][tT][lL][eE]>)"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); //Ben Forta's Homepage }
10.4、对前后查找取非

前后查找还有一种不太常见的用法叫作负前后查找(negative lookaround)。负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本,负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。

操作符说明
(?=)正向前查找
(?!)负向前查找
(?<=)正向后查找
(?<!)负向后查找
String str = "I paid $30 for 100 apples,\n" + "50 oranges, and 60 pears.\n" + "I saved $5 on this order."; //只查找数量,负向后查找,匹配结果只包含那些不以$开头的数值 String pattern = "\\b(?<!\\$)\\d+\\b"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); while (m.find()) { System.out.println(m.group()); }

Java开发的就业市场正在经历结构性调整,竞争日益激烈

传统纯业务开发岗位(如仅完成增删改查业务的后端工程师)的需求,特别是入门级岗位,正显著萎缩。随着企业技术需求升级,市场对Java人才的要求已从通用技能转向了更深入的领域经验(如云原生、微服务)或前沿的AI集成能力。这也导致岗位竞争加剧,在一、二线城市,求职者不仅面临技术内卷,还需应对学历与项目经验的高门槛。

大模型为核心的AI领域正展现出前所未有的就业热度与人才红利

2025年,AI相关新发岗位数量同比激增543%,单月增幅最高超过11倍,大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡,议价能力极强,跳槽薪资涨幅可达30%-50%。值得注意的是,市场并非单纯青睐算法研究员,而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师,在向“Java+大模型”复合人才转型时拥有独特优势,成为企业竞相争夺的对象,其薪资天花板也远高于传统Java岗位。

说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。

结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”

先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。

即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!

如何学习AGI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 23:19:33

ResNet18物体识别极简教程:没GPU也能跑,1小时1块钱

ResNet18物体识别极简教程&#xff1a;没GPU也能跑&#xff0c;1小时1块钱 引言&#xff1a;中学生也能玩转的AI物体识别 作为一名曾经在中学科技社团指导过AI项目的老师&#xff0c;我完全理解同学们面临的困境&#xff1a;想体验酷炫的AI物体识别技术&#xff0c;但学校电脑…

作者头像 李华
网站建设 2026/4/18 7:43:58

Rembg模型轻量化:ONNX格式转换与优化

Rembg模型轻量化&#xff1a;ONNX格式转换与优化 1. 引言&#xff1a;智能万能抠图 - Rembg 在图像处理和内容创作领域&#xff0c;自动去背景是一项高频且关键的需求。无论是电商商品图精修、社交媒体内容制作&#xff0c;还是UI设计中的素材提取&#xff0c;传统手动抠图耗…

作者头像 李华
网站建设 2026/4/18 0:22:25

Rembg抠图技术深度剖析:为什么它比传统方法更好

Rembg抠图技术深度剖析&#xff1a;为什么它比传统方法更好 1. 智能万能抠图 - Rembg 在图像处理领域&#xff0c;背景去除&#xff08;Image Matting / Background Removal&#xff09;是一项高频且关键的任务。无论是电商商品图制作、证件照换底、广告设计还是AI内容生成&a…

作者头像 李华
网站建设 2026/4/18 11:47:33

Rembg模型对比:CPU与GPU性能评测

Rembg模型对比&#xff1a;CPU与GPU性能评测 1. 引言&#xff1a;智能万能抠图 - Rembg 在图像处理领域&#xff0c;背景去除是一项高频且关键的任务&#xff0c;广泛应用于电商商品展示、证件照制作、视觉设计和AI内容生成等场景。传统手动抠图效率低下&#xff0c;而基于深…

作者头像 李华
网站建设 2026/4/21 19:30:20

9大AI学术写作助手,提供LaTeX模板与智能校对功能

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华