正则表达式\b(正则表达式不允许输入中文)

本篇文章给大家谈谈正则表达式\b,以及正则表达式不允许输入中文对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

正则表达式[\\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和正则表达式不允许输入中文的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表