正则表达式[]里的五个特殊字符

前端正则表达式在处理特殊字符时的技巧 前端开发中,表单验证(如邮箱/密码格式)、数据清洗(如过滤敏感词)、字符串解析(如提取URL参数)都需要正则表达式。但像(邮箱)、(域名)、(URL锚点)这类特殊字符,在正则中有“双重身份”——既是普通字符,又是具有特殊含义的元字符。本文聚焦“如何正确处理这些特殊字符”,覆盖JavaScript正则的核心场景。本文从“特殊字符为什么特殊”讲起,用“超市购物”类比转义逻辑,再分场景讲解转义规则、字符类技巧、动态正则构建,最后通过“邮箱验证”“HTML转义”等实战案例巩固,附工具推荐和避坑指南。元字符 阅读详情

正则表达式[]里的五个特殊字符

 

在正则表达式[]里面,主要的特殊字符有五个:[]-\^。 
它们在特定情况下,需要表达本身的字面意思,就需要做转义处理;如果不做转义处理,可能会得到其他的意义,从而得到错误的匹配结果。 
除了这五个字符以外,在[]中的.*+|都是没有任何特殊意义的,它们都表示它们本身的字面意思,也就是说,*就是*

 

 

下面深入讲解下正则表达式[]里的这五个特殊字符:

(一)[ 和 ]

因为与正则表达式[]本身冲突,因此,需要匹配其本身时,需要进行转义处理。 
例如, 
源文本:我是一名[PHP]工程师,而不是一名[Java]工程师,也不是一名[C++]工程师,更不是一名[C#]工程师。 
需求:匹配[]中的工程师类型,工程师类型由大小写字母和+#构成。 
正则:\[([a-zA-Z+#]+)\]

(二)-

一般情况下,我们会使用[0-9]或者[a-z]这样的表达式来表达数字和小写字母,也就是说,-在此处的意思是表达一个范围值,即从09和从az

如果我们想要得到一个由*-+组成的匹配时,可能有些人会写成[*-+],而且,有些时候测试用例不完整的情况下,还发现不了问题。

[*-+]这个表达式其实表示的是*的ASCII值到+的ASCII值的范围,在我们常见的字母、数字、特殊字符区间里,它刚好能匹配*+,却并没像预期那样匹配到-。甚至,如果你写成了[+-*],它还会报错,就像你不能写成[9-0]一样,它会提示你:Warning: preg_match(): Compilation failed: range out of order in character class at offset 3。而如果你写成了[-*+]或者[*+-],那么恭喜你,你碰巧写对了。

因此,对于[]中的-,如果需要表达其字面意思,除非我们把它写到了[]的开头或者结尾,我们都是需要做转义处理的,也就是[*\-+]。虽然写到开头或结尾不需要转义,但我还是建议,需要表达-本身字面意思时,最好都使用转义,这也便于维护者对于该表达式的理解。

(三)\

\本身是转义符,如果你不对它做转义,它将对其后面的字符做转义,所以,这个字符要表达其字面意思时,必须做转义,也就是\\

(四)^

^我们常见用法是[^0-9]这种,在[]中放到开头,用于表示排除,也就是非的意思。[^0-9]就表示 [0-9] 的任意字符,也就是,匹配不包含0123456789的其他任意字符。 
但是,如果^写到了[]的其他地方,也就是不在开头时,它就表示它自己的字面意思了。 
-一样,虽然在不同位置能让它的特殊功能失效,但是想要匹配其字面意思时,我还是建议大家对它进行转义处理,也就是[\^]这样。

(五) 总结

别问我为什么只有4个,请回去看看(一)里有几个。

在正则表达式[]里面,主要有五个特殊字符:[]-\^,需要表达其字面意思时,最好都对它们进行转义,而其他的任何字符,在[]都只能表达其字面意思。 
因此,特别强调一个非常常见的错误写法:[https|http] 
有些人想要表达https或者http的意思,就写了这个错误匹配,我们会发现,上面的式子其实等价[htps|],原因很简单,[]是单字符匹配,而且里面的|只能表达其字面意思。对于这个例子的改正可以用下面两种写法: 
(https|http) 和 https?。 
(https|http),利用了|字符  的意义,因为|的作用域是从左到右,直到遇到括号为止,因此,使用|的时候需要特别留意,一定要使用括号限定,否则又可能陷入另一个错误当中,如^https|http://,本来要表达^https://^http://,却得到了^httpshttp://。 
https?,这个利用了?的0个或1个匹配的意义,如果s?匹配0个,那么就能匹配http,如果s?匹配1个,那么就能匹配https,从而达到预期目的。

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析 在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu 阅读详情

相关推荐

当R语言遇见MaxENT:参数优化的艺术与自动化调参实践

本文探讨了R语言与MaxENT在生态位建模中的结合应用,重点介绍了参数优化与自动化调参的实践方法。通过caret与ENMeval工具链,研究人员可以高效处理多物种、多环境变量的大规模分析任务,提升模型性能与工作效率。文章还涵盖了从数据准备到结果可视化的全流程,为生态学家提供了实用的技术指导。

corn8的博客 438

正则表达式全部符号解释

字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\("...

ddluj9871835的博客 556

Android中的Service:Binder,Messenger,AIDL(2)

前言前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等。在这一篇博文有一些需要前一篇铺垫的东西,建议没有看过前一篇博文的同学先去看一下前一篇: Android中的Service:默默的奉献者 (1) 。但是在前一篇博文中也有一些遗漏的东西——主要是关于bindService()这一块的具体细节。由于这

lypeer的专栏 5万+

一天学会正则表达

1、字符/ 对于单个字符,通常按字面意义表示,/字符指出其后的字符特殊字符,所以不做字面意义解释,而解释为特殊字符。例如/b/相当于字符b,通过在b前面加一个反斜杠,即为//b/,则该字符变成特殊字符,表示匹配一个单词的分界线。对于几个字符,通常说明是特殊的,/符号指出其后的字符不是特殊的,而应按字面解释 2、字符* 表示匹配的字符必须在最前边。例如 /^A/字符不匹配 an

phphot 2178

正则表达式——用于字符串匹配的特殊字符的语法

字符 描述将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。(^在内部出现,表示 非)匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,匹配输入字符串的结束位置。

alan_zhang30的博客 8268

正则表达式中的特殊字符

正则表达式中的特殊字符 组成 一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。 特殊字符非常多,可以参考: MDN jQuery 手册:正则表达式部分 边界符 正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符 边界符 说明...

honeygirl_的博客 1万+

检测特殊字符正则表达式

检测特殊字符 正则表达式特殊字符 用户在取名或改名时,输入特殊字符的情况检测。

JeterPong's Column 1万+

java正则表达式处理特殊字符

前言 一串字符串中有特殊符号,可能会影响到相关接口业务,所以需要把字符串中的特殊字符都过滤掉 百度上面搜索大部分处理方法是通过正则表达式, 他需要处理的特殊符号都写进正则表达式中去校验, 这种方式一眼看过去就非常别扭, 感觉不灵活, 万一需要过滤其他的又得临时加进去 解决方案 如下所示 public static String stringFilter (String str){ String regEx="[\\u00A0\\s\"`~!@#$%^&*()+=|{}':;'

Shiner 3万+

php正则表达式 包含特殊字符,正则表达式 匹配 含有特殊字符

$info = array("https://segmentfault.com/q/1010000003711515","http://www.baidu.com?admin.php&jasdhjas=asjd",'php $a=0; echo "abc";',"假如这是第三个....*^%$#@!()[]{}",);foreach ($info as $key => $value)...

weixin_33526828的博客 2249

正则表达式特殊字符

<!--body,td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #333333; text-decoration: none;}-->正则表达式特殊字符有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符,必须首先将这些字

Phenlit的专栏 2703

java 特殊字符_Java正则表达式特殊字符及其处理以及正则表达式详解

在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总,特别注意:"\"字符本身在正则表示需要用"\\\\"表示字符说明^匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"$匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"( )标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"[ ]用来自定义能够匹配 '多种字符' ...

weixin_42522167的博客 1万+

Java正则表达式特殊字符及其处理以及正则表达式详解

在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总,特别注意:"\"字符本身在正则表示需要用"\\\\"表示字符说明^匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"$匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"( )标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"[ ]用来自定义能...

weixin_33672109的博客 1万+

正则表达式匹配各种特殊字符

这篇文章主要介绍了正则表达式匹配各种特殊字符的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 写个可以匹配一下各种特殊字符正则表达式 ? 1 2 ((?=[\x21-\x7e]+)[^A-Za-z0-9]) x21-\x7e]+)[^A-Za-z0-9]) 这个匹配所有键盘上可见的非字母和数字的符号 ? ...

光_影の博客 8342

JS正则表达式中有哪些特殊字符,这些特殊字符又分别表示什么含义?

JS正则表达式中有哪些特殊字符,这些特殊字符又分别表示什么含义? 在正则表达式中,许多标点符号具有特殊含义,比较难记,现归纳备个份: 这些符号有:^ $ . * +  - ? = ! : | \ / ( ) [ ] { } 1.“[ ]”表示字符类: 即括号是个字符集:如/[abc]/,表示和含有a,b,c任何一个字母的字符串都匹配。 注:特殊字符类:\s表示空格符、制表符、Unicod

哈里·雪利博客 9465

JavaScript正则表达式正则表达式中的特殊字符

正则表达式的组成一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。特殊字符非常多,可以参考: MDN:正则表达式 - JavaScript | MDN (mozilla.org)jQuery 手册:正则表达式部分正则测试工具: 在线正则表达式测试这我们把元字符划分几类学习 。边界符正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。 如果 ^

薛定谔的猫 6729

java正则表达式 过滤特殊字符正则表达式

java正则表达式 过滤特殊字符正则表达式 // 过滤特殊字符       public   static   String StringFilter(String   str)   throws   PatternSyntaxException   {                      // 只允许字母和数字                        // Strin

fpf_721521的专栏 2万+

正则表达式特殊字符

正则表达式特殊字符  符号  说明  ^  正则表达式的开始字符  $  正则表达式的结束字符  \w  匹配字母、数字、下划线  \W  匹配不是字符、数字、下划线的字符  \s  匹配空白字符  \S  匹配不是空白的字符  \d  匹配数字  \D  匹配非数字的字符

mycar001的博客 2546

不允许输入特殊字符正则表达式_JavaScript正则表达式常用技巧

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式的掌握程度能粗略地看出程序员的技术底子,所以技术面试、编程竞赛等 都特别喜欢考察正则表达式。本篇就带你一起夯实一下 Java...

weixin_36472741的博客 5009

正则表达式特殊字符

字符/意义:对于字符,通常表示按字面意义,指出接着的字符特殊字符,不作解释。例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示匹配一个单词的分界线。或者:对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面

Phoenix Nirvana 906
上一篇: SQL模糊查询详解
下一篇: android的事件分发机制
时希@晴
博客等级 码龄16年 17粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值