正则表达式\b(正则表达式不允许输入中文)
本篇文章给大家谈谈正则表达式\b,以及正则表达式不允许输入中文对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、正则表达式[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+
- 2、正则表达式\\[[^\\]]+\\]"是表示什么
- 3、正则表达式里的?:是啥意思例如(?:a|b)
- 4、正则表达式/正规式转DFA实例
正则表达式[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+
转义字符 \b 是一个特例。在正则表达式中,\b 表示单词边界(在 \w 和 \W 之间),不过,在 [] 字符类中,中山春\b 表示退格符。在替换模式中,\b 始终表示退格符。
(?name子表达式)
将匹配的子表达式捕获到一个组名称或编号名称中。用于 name 的字符串不得包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如 (?'name')。
\s
与任何空白字符匹配。等效于转义符和 Unicode 通用类别 [\f\n\r\t\v\x85\p]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \s 等效于 [ \f\n\r\t\v]。
\kname
命名后向引用唯帆。例如,(?卖耐char\w)\kchar 查找双写的单词字符。表达式 (?43\w)\43 执行同样的操作。可以使用单引号替代尖括号,例如 \k'char'。
\b(?word\w+)\s+(\kword)\b
这句话的意思是,匹配两个连续两个中间有空格(空白)的单词。
比如
This is the the big world.
中的the the
正则表达式\\[[^\\]]+\\]"是表示什么
比方说我需要判断一个串是不是一个邮箱,你需要判断它是是不是由字母数字下划线组成,还包含一个@,且只有一个@,而且这个@不能在最前最后,串的最后面需要以.com来结尾,而且这个.com还不能紧跟在@后面,隐此balabala一大堆的规则,这么多要是用if来判断实在是太麻烦了吧。
那么你写一个正则表达式可以一下子定义完所有的规则,我写一个简单的判断是否为邮箱的正则 ^[\da-zA-Z_]+@[\da-zA-Z_]+.com$, \d表示一个数字,a-zA-Z表示52个大小写的英文字母[\da-zA-Z_]表示在数字字母和下划线中取出一个值,这个值可以是a/b/K/N/2/_,+表示1-n个,^$表示串的开头和结尾。那么上面的表达式的意思就是“以1-n个字母或数字或下划线开头,后面跟个@再跟1-n个字母或数字或下划线,最后以.com结尾。”如果一个串满足这样的规则我就认为它是一个亮知邮箱,当然,这是你定的规则。
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最灶键迅初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen。
[img]正则表达式里的?:是啥意思例如(?:a|b)
我也是找答案时看到的,发现这里回答的理论是的,但不好让人理解,我也结合其他地方的资料,才能理解他的答案。下面我用两个例子来说明 单引号里面的三个元字符之间的意思 ‘ () ' '\1' '?:' 其实我自己也是加深一下蚂镇这块的印象
在一段英文里,我们需要匹配连续重复的单词,如 I'm lost lost. 这里发现lost重复了,当内容很多时
我们就用正则来 \b(\w+)\b\s+\1\b 来找这样连续重复单词
正则规则解释
\b匹配单词的开始
(\w+)匹配单词并存储一份闷晌粗单词 当后面有反向引用时 则可以调用这个存储的单词
\b匹配单词的结束
\s+一个或多个空格
\1这个是反向引用 引用前面括号里存储的单词 也就是 \w+
\b单词结束
了解了前面的 这时如果把?:加进去
\b(?:\w+)\b\s+\1\b
这个表达式就无效了 因为(?:\w) 这个单词虽可以被匹配但不会存储一份 后面出现的 \1 也不会调用前面括号里的单词 所以 表达式就失效了
那么(?:)有什么用呢
再举例简单说明一下
想在一篇文章中找"program"和"project"这两个单词
正则表达式可表示为 program|project
也可表示为 pro(gram|ject)
但用了()就表示会匹配谨历括号里存在的内容且存储一份
用 | 隔开了 也就是说 gram和ject 都被存储了一份 但这样存储的内容是无意义的
所以表达式写成这样 pro(?:gram|ject)
一是显得比较简洁
二是不会存储无意义的内容
正则表达式/正规式转DFA实例
RG : (regular grammar) 正则文法
RE : (regular expression) 正则表达式
DFA : (deterministic finite automaton) 确定的有穷状态自动机
NFA : (non-deterministic finite automaton) 不确定的有穷状态自动机
ε-NFA : (non-deterministic finite automaton with ε-moves) 带空移动的不确定有穷状态自动机
举例:(a|b)*abb
拆分成(a|b)*和abb两个部分
1)构造(a|b)*
a. 对于a构造如下NFA:
b. 对于b的构造如下NFA:
c. a|b的NFA如图4所示
d. (a|b)*的NFA如图5所示
2) 构造abb,连接在图5所示NFA后面即可,最终结果如图6所示
1) NFA状态集上的操作
2) 图6中NFA转DFA
a) 开始状态A是ε-closure(0),即A={0,1,2,4,7}。
注意:状态0也是可以从自身出发经过ε到达的状态
b) NFA输入字母表为{a,b}
先计算状态A经过a所得到的集合B--ε-closure(move(A,a))
move(A,a)={3,8}
ε-closure({3,8}))={1,2,3,4,6,7,8}
同理,计算状态A经过b得到的集合C:ε-closure(move(A,b)) =ε-closure({5})={1,2,3,6,7}
之后对集合B,C继续这个处理过程,最终使得这个DFA的所有状态都被加上标记,结果如图8所示
构造DFA结果如图9所示
1) 初始分组
分为非接受状态组和接受状态组
空唤 {A,B,C,D}和{E}
2) 分割
因为组{E}只包含一个状态,不能再被分割了
毕敏 另一个{A,B,C,D}
考虑输入a的时候,这些状态都转向B,因此使用以a开头的串无法区分这些状态
考虑输入b的时候,A,B,C转到组{A,B,C,D}的某个成员上,而D转向斗数凯另一个组的成员E 上,因此将{A,B,C,D}分割成{A,B,C}和{D},得到新一轮状态组{A,B,C}{D}{E}
3) 再次分割
考虑组{A,B,C}
输入b时,A,C到达{A,B,C}中的元素,B到达另一个组中的元素D,因此分割后的状态组为{A,C}{B}{D}{E}
4) 分割完成
{A,C}无法再进行分割,所以最终的状态组就为{A,C}{B}{D}{E}
5) 最小DFA
从状态组中挑选出A,B,D,E作为对应组的代表,其转换函数如图10所示
最终的DFA如图11所示
形式语言与自动机理论
编译原理(紫龙书)
关于正则表达式\b和正则表达式不允许输入中文的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。