当前位置: 首页 > news >正文

做封面的网站淘宝开店网站怎么做

做封面的网站,淘宝开店网站怎么做,怎样找到免费的黄页网站,深圳创业补贴政策2023揭开正则表达式的神秘面纱关闭高亮[原创文章#xff0c;转载请保留或注明出处#xff1a;http://www.regexlab.com/zh/regref.htm]引言正则表达式#xff08;regular expression#xff09;就是用一个“字符串”来描述一个特征#xff0c;然后去验证另一个“字符串”是否符…揭开正则表达式的神秘面纱关闭高亮[原创文章转载请保留或注明出处http://www.regexlab.com/zh/regref.htm]引言    正则表达式regular expression就是用一个“字符串”来描述一个特征然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab” 描述的特征是“一个 a 和 任意个 b ”那么 ab, abb, abbbbbbbbbb 都符合这个特征。    正则表达式可以用来1验证字符串是否符合指定特征比如验证是否是合法的邮件地址。2用来查找字符串从一个长的文本中查找符合指定特征的字符串比查找固定字符串更加灵活方便。3用来替换比普通的替换更强大。   正则表达式学习起来其实是很简单的不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂一方面是因为大多数的文档没有做到由浅入深地讲解概念上没有注意先后顺序给读者的理解带来困难另一方面各种引擎自带的文档一般都要介绍它特有的功能然而这部分特有的功能并不是我们首先要理解的。    文章中的每一个举例都可以点击进入到测试页面进行测试。闲话少说开始。1. 正则表达式规则1.1 普通字符    字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号都是普通字符。表达式中的普通字符在匹配一个字符串的时候匹配与之相同的一个字符。    举例1表达式 c在匹配字符串 abcde 时匹配结果是成功匹配到的内容是c匹配到的位置是开始于2结束于3。注下标从0开始还是从1开始因当前编程语言的不同而可能不同    举例2表达式 bcd在匹配字符串 abcde 时匹配结果是成功匹配到的内容是bcd匹配到的位置是开始于1结束于4。1.2 简单的转义字符    一些不便书写的字符采用在前面加 \ 的方法。这些字符其实我们都已经熟知了。表达式可匹配\r, \n代表回车和换行符\t制表符\\代表 \ 本身    还有其他一些在后边章节中有特殊用处的标点符号在前面加 \ 后就代表该符号本身。比如^, $ 都有特殊意义如果要想匹配字符串中 ^ 和 $ 字符则表达式就需要写成 \^ 和 \$。表达式可匹配\^匹配 ^ 符号本身\$匹配 $ 符号本身\.匹配小数点.本身    这些转义字符的匹配方法与 普通字符 是类似的。也是匹配与之相同的一个字符。    举例1表达式 \$d在匹配字符串 abc$de 时匹配结果是成功匹配到的内容是$d匹配到的位置是开始于3结束于5。1.3 能够与 多种字符 匹配的表达式    正则表达式中的一些表示方法可以匹配 多种字符 其中的任意一个字符。比如表达式 \d 可以匹配任意一个数字。虽然可以匹配其中任意字符但是只能是一个不是多个。这就好比玩扑克牌时候大小王可以代替任意一张牌但是只能代替一张牌。表达式可匹配\d任意一个数字0~9 中的任意一个\w任意一个字母或数字或下划线也就是 A~Z,a~z,0~9,_ 中任意一个\s包括空格、制表符、换页符等空白字符的其中任意一个.小数点可以匹配除了换行符\n以外的任意一个字符    举例1表达式 \d\d在匹配 abc123 时匹配的结果是成功匹配到的内容是12匹配到的位置是开始于3结束于5。    举例2表达式 a.\d在匹配 aaa100 时匹配的结果是成功匹配到的内容是aa1匹配到的位置是开始于1结束于4。1.4 自定义能够匹配 多种字符 的表达式    使用方括号 [ ] 包含一系列字符能够匹配其中任意一个字符。用 [^ ] 包含一系列字符则能够匹配其中字符之外的任意一个字符。同样的道理虽然可以匹配其中任意一个但是只能是一个不是多个。表达式可匹配[ab5]匹配 a 或 b 或 5 或 [^abc]匹配 a,b,c 之外的任意一个字符[f-k]匹配 f~k 之间的任意一个字母[^A-F0-3]匹配 A~F,0~3 之外的任意一个字符    举例1表达式 [bcd][bcd] 匹配 abc123 时匹配的结果是成功匹配到的内容是bc匹配到的位置是开始于1结束于3。    举例2表达式 [^abc] 匹配 abc123 时匹配的结果是成功匹配到的内容是1匹配到的位置是开始于3结束于4。1.5 修饰匹配次数的特殊符号    前面章节中讲到的表达式无论是只能匹配一种字符的表达式还是可以匹配多种字符其中任意一个的表达式都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号那么不用重复书写表达式就可以重复匹配。    使用方法是次数修饰放在被修饰的表达式后边。比如[bcd][bcd] 可以写成 [bcd]{2}。表达式作用{n}表达式重复n次比如\w{2} 相当于 \w\wa{5} 相当于 aaaaa{m,n}表达式至少重复m次最多重复n次比如ba{1,3}可以匹配 ba或baa或baaa{m,}表达式至少重复m次比如\w\d{2,}可以匹配 a12,_456,M12344...?匹配表达式0次或者1次相当于 {0,1}比如a[cd]?可以匹配 a,ac,ad表达式至少出现1次相当于 {1,}比如ab可以匹配 ab,aab,aaab...*表达式不出现或出现任意次相当于 {0,}比如\^*b可以匹配 b,^^^b...    举例1表达式 \d\.?\d* 在匹配 It costs $12.5 时匹配的结果是成功匹配到的内容是12.5匹配到的位置是开始于10结束于14。    举例2表达式 go{2,8}gle 在匹配 Ads by goooooogle 时匹配的结果是成功匹配到的内容是goooooogle匹配到的位置是开始于7结束于17。1.6 其他一些代表抽象意义的特殊符号    一些符号在表达式中代表抽象的特殊意义表达式作用^与字符串开始的地方匹配不匹配任何字符$与字符串结束的地方匹配不匹配任何字符\b匹配一个单词边界也就是单词和空格之间的位置不匹配任何字符    进一步的文字说明仍然比较抽象因此举例帮助大家理解。    举例1表达式 ^aaa 在匹配 xxx aaa xxx 时匹配结果是失败。因为 ^ 要求与字符串开始的地方匹配因此只有当 aaa 位于字符串的开头的时候^aaa 才能匹配比如aaa xxx xxx。    举例2表达式 aaa$ 在匹配 xxx aaa xxx 时匹配结果是失败。因为 $ 要求与字符串结束的地方匹配因此只有当 aaa 位于字符串的结尾的时候aaa$ 才能匹配比如xxx xxx aaa。    举例3表达式 .\b. 在匹配 abc 时匹配结果是成功匹配到的内容是a匹配到的位置是开始于2结束于4。    进一步说明\b 与 ^ 和 $ 类似本身不匹配任何字符但是它要求它在匹配结果中所处位置的左右两边其中一边是 \w 范围另一边是 非\w 的范围。    举例4表达式 \bend\b 在匹配 weekend,endfor,end 时匹配结果是成功匹配到的内容是end匹配到的位置是开始于15结束于18。    一些符号可以影响表达式内部的子表达式之间的关系表达式作用|左右两边表达式之间 或 关系匹配左边或者右边( )(1). 在被修饰匹配次数的时候括号中的表达式可以作为整体被修饰(2). 取匹配结果的时候括号中的表达式匹配到的内容可以被单独得到    举例5表达式 Tom|Jack 在匹配字符串 Im Tom, he is Jack 时匹配结果是成功匹配到的内容是Tom匹配到的位置是开始于4结束于7。匹配下一个时匹配结果是成功匹配到的内容是Jack匹配到的位置时开始于15结束于19。    举例6表达式 (go\s*) 在匹配 Lets go go go! 时匹配结果是成功匹配到内容是go go go匹配到的位置是开始于6结束于14。    举例7表达式 (\d\.?\d*) 在匹配 10.9,20.5 时匹配的结果是成功匹配到的内容是20.5匹配到的位置是开始于6结束于10。单独获取括号范围匹配到的内容是20.5。2. 正则表达式中的一些高级规则2.1 匹配次数中的贪婪与非贪婪    在使用修饰匹配次数的特殊符号时有几种表示方法可以使同一个表达式能够匹配不同的次数比如{m,n}, {m,}, ?, *, 具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中总是尽可能多的匹配。比如针对文本 dxxxdxxxd举例如下表达式匹配结果(d)(\w)\w 将匹配第一个 d 之后的所有字符 xxxdxxxd(d)(\w)(d)\w 将匹配第一个 d 和最后一个 d 之间的所有字符 xxxdxxx。虽然 \w 也能够匹配上最后一个 d但是为了使整个表达式匹配成功\w 可以 让出 它本来能够匹配的最后一个 d    由此可见\w 在匹配的时候总是尽可能多的匹配符合它规则的字符。虽然第二个举例中它没有匹配最后一个 d但那也是为了让整个表达式能够匹配成功。同理带 * 和 {m,n} 的表达式都是尽可能地多匹配带 ? 的表达式在可匹配可不匹配的时候也是尽可能的 要匹配。这 种匹配原则就叫作 贪婪 模式 。    非贪婪模式    在修饰匹配次数的特殊符号后再加上一个 ? 号则可以使匹配次数不定的表达式尽可能少的匹配使可匹配可不匹配的表达式尽可能的 不匹配。这种匹配原则叫作 非贪婪 模式也叫作 勉强 模式。如果少匹配就会导致整个表达式匹配失败的时候与贪婪模式类似非贪婪模式会最小限度的再匹配一些以使整个表达式匹配成功。举例如下针对文本 dxxxdxxxd 举例表达式匹配结果(d)(\w?)\w? 将尽可能少的匹配第一个 d 之后的字符结果是\w? 只匹配了一个 x(d)(\w?)(d)为了让整个表达式匹配成功\w? 不得不匹配 xxx 才可以让后边的 d 匹配从而使整个表达式匹配成功。因此结果是\w? 匹配 xxx    更多的情况举例如下    举例1表达式 td(.*)/td 与字符串 tdpaa/p/td tdpbb/p/td 匹配时匹配的结果是成功匹配到的内容是 tdpaa/p/td tdpbb/p/td 整个字符串 表达式中的 /td 将与字符串中最后一个 /td 匹配。     举例2相比之下表达式 td(.*?)/td 匹配举例1中同样的字符串时将只得到 tdpaa/p/td 再次匹配下一个时可以得到第二个 tdpbb/p/td。2.2 反向引用 \1, \2...    表达式在匹配时表达式引擎会将小括号 ( ) 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候小括号包含的表达式所匹配到的字符串可以单独获取。这一点在前面的举例中已经多次展示了。在实际应用场合中当用某种边界来查找而所要获取的内容又不包含边界时必须使用小括号来指定所要的范围。比如前面的 td(.*?)/td。    其实小括号包含的表达式所匹配到的字符串 不仅是在匹配结束后才可以使用在匹配过程中也可以使用。表达式后边的部分可以引用前面 括号内的子匹配已经匹配到的字符串。引用方法是 \ 加上一个数字。\1 引用第1对括号内匹配到的字符串\2 引用第2对括号内匹配到的字符串……以此类推如果一对括号内包含另一对括号则外层的括号先排序号。换句话说哪一对的左括号 ( 在前那这一对就先排序号。    举例如下    举例1表达式 (|)(.*?)(\1) 在匹配 Hello, World 时匹配结果是成功匹配到的内容是 Hello 。再次匹配下一个时可以匹配到 World 。    举例2表达式 (\w)\1{4,} 在匹配 aa bbbb abcdefg ccccc 111121111 999999999 时匹配结果是成功匹配到的内容是 ccccc。再次匹配下一个时将得到 999999999。这个表达式要求 \w 范围的字符至少重复5次注意与 \w{5,} 之间的区别。    举例3表达式 (\w)\s*(\w((|).*?\4)?\s*)*.*?/\1 在匹配 td idtd1 stylebgcolor:white/td 时匹配结果是成功。如果 td 与 /td 不配对则会匹配失败如果改成其他配对也可以匹配成功。2.3 预搜索不匹配反向预搜索不匹配    前面的章节中我讲到了几个代表抽象意义的特殊符号^$\b。它们都有一个共同点那就是它们本身不匹配任何字符只是对 字符串的两头 或者 字符之间的缝隙 附加了一个条件。理解到这个概念以后本节将继续介绍另外一种对 两头 或者 缝隙 附加条件的更加灵活的表示方法。    正向预搜索(?xxxxx)(?!xxxxx)    格式(?xxxxx)在被匹配的字符串中它对所处的 缝隙 或者 两头 附加的条件是所在缝隙的右侧必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 \b本身不匹配任何字符。\b 只是将所在缝隙之前、之后的字符取来进行了一下判断不会影响后边的表达式来真正的匹配。    举例1表达式 Windows (?NT|XP) 在匹配 Windows 98, Windows NT, Windows 2000 时将只匹配 Windows NT 中的 Windows 其他的 Windows 字样则不被匹配。    举例2表达式 (\w)((?\1\1\1)(\1)) 在匹配字符串 aaa ffffff 999999999 时将可以匹配6个f的前4个可以匹配9个9的前7个。这个表达式可以读解成重复4次以上的字母数字则匹配其剩下最后2位之前的部分。当然这个表达式可以不这样写在此的目的是作为演示之用。    格式(?!xxxxx)所在缝隙的右侧必须不能匹配 xxxxx 这部分表达式。    举例3表达式 ((?!\bstop\b).) 在匹配 fdjka ljfdl stop fjdsla fdj 时将从头一直匹配到 stop 之前的位置如果字符串中没有 stop则匹配整个字符串。    举例4表达式 do(?!\w) 在匹配字符串 done, do, dog 时只能匹配 do。在本条举例中do 后边使用 (?!\w) 和使用 \b 效果是一样的。    反向预搜索(?xxxxx)(?!xxxxx)    这两种格式的概念和正向预搜索是类似的反向预搜索要求的条件是所在缝隙的 左侧两种格式分别要求必须能够匹配和必须不能够匹配指定表达式而不是去判断右侧。与 正向预搜索 一样的是它们都是对所在缝隙的一种附加条件本身都不匹配任何字符。    举例5表达式 (?\d{4})\d(?\d{4}) 在匹配 1234567890123456 时将匹配除了前4个数字和后4个数字之外的中间8个数字。由于 JScript.RegExp 不支持反向预搜索因此本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索比如Java 1.4 以上的 java.util.regex 包.NET 中System.Text.RegularExpressions 命名空间以及本站推荐的最简单易用的 DEELX 正则引擎。3. 其他通用规则    还有一些在各个正则表达式引擎之间比较通用的规则在前面的讲解过程中没有提到。3.1 表达式中可以使用 \xXX 和 \uXXXX 表示一个字符X 表示一个十六进制数形式字符范围\xXX编号在 0 ~ 255 范围的字符比如空格可以使用 \x20 表示\uXXXX任何字符可以使用 \u 再加上其编号的4位十六进制数表示比如\u4E2D3.2 在表达式 \s\d\w\b 表示特殊意义的同时对应的大写字母表示相反的意义表达式可匹配\S匹配所有非空白字符\s 可匹配各个空白字符\D匹配所有的非数字字符\W匹配所有的字母、数字、下划线以外的字符\B匹配非单词边界即左右两边都是 \w 范围或者左右两边都不是 \w 范围时的字符缝隙3.3 在表达式中有特殊意义需要添加 \ 才能匹配该字符本身的字符汇总字符说明^匹配输入字符串的开始位置。要匹配 ^ 字符本身请使用 \^$匹配输入字符串的结尾位置。要匹配 $ 字符本身请使用 \$( )标记一个子表达式的开始和结束位置。要匹配小括号请使用 \( 和 \)[ ]用来自定义能够匹配 多种字符 的表达式。要匹配中括号请使用 \[ 和 \]{ }修饰匹配次数的符号。要匹配大括号请使用 \{ 和 \}.匹配除了换行符\n以外的任意一个字符。要匹配小数点本身请使用 \.?修饰匹配次数为 0 次或 1 次。要匹配 ? 字符本身请使用 \?修饰匹配次数为至少 1 次。要匹配 字符本身请使用 \*修饰匹配次数为 0 次或任意次。要匹配 * 字符本身请使用 \*|左右两边表达式之间 或 关系。匹配 | 本身请使用 \|3.4 括号 ( ) 内的子表达式如果希望匹配结果不进行记录供以后使用可以使用 (?:xxxxx) 格式    举例1表达式 (?:(\w)\1) 匹配 a bbccdd efg 时结果是 bbccdd。括号 (?:) 范围的匹配结果不进行记录因此 (\w) 使用 \1 来引用。3.5 常用的表达式属性设置简介IgnorecaseSinglelineMultilineGlobal表达式属性说明Ignorecase默认情况下表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎把 大小写 概念延伸至 UNICODE 范围的大小写。Singleline默认情况下小数点 . 匹配除了换行符\n以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。Multiline默认情况下表达式 ^ 和 $ 只匹配字符串的开始 ① 和结尾 ④ 位置。如①xxxxxxxxx②\n③xxxxxxxxx④配置为 Multiline 可以使 ^ 匹配 ① 外还可以匹配换行符之后下一行开始前 ③ 的位置使 $ 匹配 ④ 外还可以匹配换行符之前一行结束 ② 的位置。Global主要在将表达式用来替换时起作用配置为 Global 表示替换所有的匹配。4. 其他提示4.1 如果想要了解高级的正则引擎还支持那些复杂的正则语法可参见本站 DEELX 正则引擎的说明文档。4.2 如果要要求表达式所匹配的内容是整个字符串而不是从字符串中找一部分那么可以在表达式的首尾使用 ^ 和 $比如^\d$ 要求整个字符串只有数字。4.3 如果要求匹配的内容是一个完整的单词而不会是单词的一部分那么在表达式首尾使用 \b比如使用 \b(if|while|else|void|int……)\b 来匹配程序中的关键字。4.4 表达式不要匹配空字符串。否则会一直得到匹配成功而结果什么都没有匹配到。比如准备写一个匹配 123、123.、123.5、.5 这几种形式的表达式时整数、小数点、小数数字都可以省略但是不要将表达式写成\d*\.?\d*因为如果什么都没有这个表达式也可以匹配成功。更好的写法是\d\.?\d*|\.\d。4.5 能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次而这个括号整体又可以匹配无限次那么情况可能比上一条所说的更严重匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了比如 .NET 的正则表达式但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环也可以从这一点入手查找一下是否是本条所说的原因。4.6 合理选择贪婪模式与非贪婪模式参见话题讨论。4.7 或 | 的左右两边对某个字符最好只有一边可以匹配这样不会因为 | 两边的表达式因为交换位置而有所不同。5. 进阶与实战    有了从本文中掌握的基础我们可以从实践中进一步巩固我们使用正则表达式的技巧。5.1 下载正则表达式文档 chm 版本    [ 点击下载 chm 版本] - DEELX 正则语法包含其他高级语法的 chm 版本。5.2 下载正则工具 Regex Match Tracer 2.0 试用版正版很值得购买    [ 下载 Match Tracer] - 471kb5.3 免费使用 Regex Match Tracer Web 版    [ 使用 Match Tracer Web 版]    本 Web 版工具为免费使用不受 Regex Match Tracer 主程序的试用期限制。5.4 更多深入话题及使用案例    [ 关于递归匹配的讨论] - 讨论如何使用不支持递归的正则引擎匹配嵌套结构    [ 有问题与站长交流] - 与站长交流和讨论    [ 本页脚本] - 本页的“关闭高亮”功能采用 javascript 的正则表达式实现的。        比如表达式 (ab|[cd])$转载于:https://www.cnblogs.com/DrWang/archive/2010/11/19/1881407.html
http://www.zqtcl.cn/news/295028/

相关文章:

  • 服务器租用相关网站一个空间怎么放两个网站吗
  • 每个城市建设规划在哪个网站南宁seo怎么做优化团队
  • 做资讯类网站ccd设计公司官网
  • 写作网站5妙不写就删除抚州建设网站
  • 沙田网站建设公司网站风格设计原则
  • 安徽省建设监理网站黑群晖可以做网站吗
  • 手机百度seo快速排名搜索引擎优化目标
  • 长春 房地产网站建设网站建设 合同
  • 电商专业培训网站建设wordpress内置播放器
  • 创意网站设计模板点击器免费版
  • 做的不错的h5高端网站网站是怎么优化的
  • 淄博做网站优化佛山 做网站公司
  • 设计网站的步骤网站开发怎么学习
  • 提供网站技术国内外电子政务网站建设差距
  • 阜新建设网站物流网站建设的小结
  • 个人可以网站备案吗建设多用户网站
  • 平面设计素材库淄博网站优化价格
  • moodle网站建设论坛排名
  • 网站建设与推广方式起名网站建设
  • 厦门网站建设网站制作网站广告推广价格
  • 网站建设费用计入哪个科目深圳网站建设工资
  • 大岭山镇网站建设公司软文是什么文章
  • 网站正在建设张雪峰谈电子商务
  • 网站建设中标签导航的特征小型广告公司简介
  • 广西省建设厅网站jquery特效网站
  • 做推文的网站创意设计绘画作品
  • 做响应式网站的体会长沙域名注册公司
  • 网站备案照片 多少钱网站怎么做网页游戏
  • 金坛区建设局网站中搜网站提交
  • 建站之星如何建网站html静态网页作业成品