`
tx984471
  • 浏览: 39827 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

时间正则表达式的写法

    博客分类:
  • ROR
阅读更多
时间格式:23:01
对应正则表达式是:/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/
分享到:
评论
1 楼 tx984471 2008-05-25  
正则表达式的基础,转摘。用于自我查询

1、 正则表达式元字符

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意空白字符
\d \d匹配数字
\b 匹配单词的开始或结束
$ 匹配字符串的结束
[abcd] 匹配字符’a’,’b’,’c’,’d’字符



2、 正则表达式的反义
\W 匹配任意不是字母或数字或下划线或汉字
\S 匹配不是空白字符
\D 匹配非数字的字符
\B 匹配不是单词开始或结束的位置
[^X] 除X以外的任意字符
[^aeiou] 匹配字符串的结束
[abcd] 匹配除aeiou字母以外的其它任意字符



3、 重复

* 重复0次或更多次
+ 重复一次或更多次

? 重复0次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次



4、分支条件 |

0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。



5、贪婪与懒惰

*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复
    举例1:表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配时,匹配的结果是:成功;匹配到的内容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符串, 表达式中的 "</td>" 将与字符串中最后一个 "</td>" 匹配。
    举例2:相比之下,表达式 "<td>(.*?)</td>" 匹配举例1中同样的字符串时,将只得到 "<td><p>aa</p></td>", 再次匹配下一个时,可以得到第二个 "<td><p>bb</p></td>"。



6、处理选项

Ignorecase 默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把 "大小写" 概念延伸至 UNICODE 范围的大小写。

Singleline 默认情况下,小数点 "." 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。

Multiline 默认情况下,表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如:
①xxxxxxxxx②\n
③xxxxxxxxx④
配置为 Multiline 可以使 "^" 匹配 ① 外,还可以匹配换行符之后,下一行开始前 ③ 的位置,使 "$" 匹配 ④ 外,还可以匹配换行符之前,一行结束 ② 的位置。

Global 主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。
ExplicitCapture 仅捕获已被显式命名的组。
ECMAScript(JavaScript兼容模式) 使表达式的行为与它在JavaScript里的行为一致。
RightToLeft(从右向左查找) 匹配从右向左而不是从左向右进行。



7、反向引用 \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 id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。


8、其它通用规则
8.1 表达式中,可以使用 "\xXX" 和 "\uXXXX" 表示一个字符("X" 表示一个十六进制数)
  \xXX 编号在 0 ~ 255 范围的字符,比如:空格可以使用 "\x20" 表示


  \uXXXX 任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示,比如:"\u4E2D"
8.2在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
. 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"


8.3 如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,那么可以在表达式的首尾使用 "^" 和 "$",比如:"^\d+$" 要求整个字符串只有数字。


8.4如果要求匹配的内容是一个完整的单词,而不会是单词的一部分,那么在表达式首尾使用 "\b",比如:使用 "\b(if|while|else|void|int……)\b" 来匹配程序中的关键字。


8.5表达式不要匹配空字符串。否则会一直得到匹配成功,而结果什么都没有匹配到。比如:准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,但是不要将表达式写成:"\d*\.?\d*",因为如果什么都没有,这个表达式也可以匹配成功。更好的写法是:"\d+\.?\d*|\.\d+"。


8.6能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次,而这个括号整体又可以匹配无限次,那么情况可能比上一条所说的更严重,匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了,比如 .NET 的正则表达式,但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环,也可以从这一点入手,查找一下是否是本条所说的原因。


8.7或 "|" 的左右两边,对某个字符最好只有一边可以匹配,这样,不会因为 "|" 两边的表达式因为交换位置而有所不同。

相关推荐

    日期正则表达式(很实用)

    ### 日期正则表达式详解 #### 一、基本概念 正则表达式是一种用于文本模式匹配的强大工具,在处理字符串时极为有用。日期格式验证是正则表达式常见应用场景之一,尤其是在表单验证、数据清洗等领域。本文将详细...

    正则表达式测试工具(验证正则表达式的效果)

    探索和实验:允许用户自由地探索和实验各种正则表达式的模式和组合,帮助用户发现更高效、更准确的表达式写法,以满足不同的需求。 可视化展示:有些测试工具会以可视化的方式展示匹配的过程和结果,使得复杂的匹配...

    Email正则表达式日常整理大全

    可是,事实上,可能有些时候,项目中或公司里的实际情况不一样,得要修改一下正则表达式的,根据实际情况来定制,这就需要我们来认真学习正则表达式的一些写法,拿来主义,在让我们享受丰富的网络共享资源的同时,也给我们...

    re2j:Java中的线性时间正则表达式匹配

    RE2 / J:Java中的线性时间正则表达式匹配 RE2是一个正则表达式引擎,其运行时间与输入大小成线性关系。 RE2 / J是RE2到纯Java的移植。 Java的标准正则表达式包java.util.regex和许多其他广泛使用的正则表达式包...

    PHP中常用正则收集(个人感觉不错)

    正则表达式:** `^\d+$` - **描述:** 匹配由一个或多个数字(0-9)组成的字符串。 - **应用场景:** 验证用户输入是否全为数字。 **2. 正则表达式:** `^[0-9]*[1-9][0-9]*$` - **描述:** 匹配非零开头的正整数。 ...

    javascript下利用数组缓存正则表达式的实现方法

    如果能用字面量创建正则就最好不过,显然有时我们不得不使用new RegExp()这种大消耗的创建方法,比如语法高亮与排版就大量用到正则表达式,要用到的patten越多,需要的时间就越长,火狐好像是12秒就发出警告,IE就...

    Java实验指导书(实验七).doc

    2. **正则表达式**:理解正则表达式的原理及其在Java中的应用。 3. **数学运算类**:熟悉Java中`Math`类及`BigInteger`类的功能和用法。 4. **日期处理类**:学习Java中日期相关类(如`Date`类和`Calendar`类)的...

    js解析多种写法的lrc歌词

    综上所述,解析多种写法的LRC歌词需要理解其文件格式,运用正则表达式进行高效解析,并处理自定义标签和实现每字同步。在JS中,这涉及到字符串操作、正则匹配、数据结构设计以及实时同步等多个技术点。通过以上步骤...

    CX文章采集器规则写法

    CX采集器的规则写法涉及对HTML结构的理解以及正则表达式的运用,初学者可能需要一定时间来熟悉和实践。建议在学习过程中,多观察目标网站的源代码,了解常见的HTML标签及其属性,同时加强正则表达式的练习,以提高...

    IIS服务器SSI(rewrite重写)插件的帮助资料

    ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2...

    JavaScript帮助文档CHM.rar

    JavaScript还包含了数组、正则表达式、日期和时间处理、错误处理等丰富的内置对象和方法。数组可以用索引来访问元素,支持多种操作,如push、pop、slice等。正则表达式用于模式匹配和字符串操作,是处理文本的强大...

    js获取时间 的时分秒出现NaN

    1. **正则表达式使用不当**:在使用`replace`方法替换字符串中的特定字符时,应确保正则表达式的正确性。这里的`new RegExp("-", "gm")`中,“gm”标志是无效的组合。正确的写法应该是只保留“g”标志,或者干脆不...

    C#程序员应该养成的程序性能优化写法

    3. **谨慎使用正则表达式**:虽然正则表达式在处理字符串模式匹配时非常强大,但它们的性能并非始终最优。在简单替换操作中,`String.Replace`可能比构造正则表达式更快。在上述例子中,`ConvertQuot1`方法直接使用`...

    非常著名的perl学习手札(初学者有福了)

    - **强大的文本处理能力**:Perl内置了正则表达式支持,非常适合用于文本分析和数据处理。 **1.4 使用Perl的环境** Perl通常在服务器端应用较多,如Web开发、系统管理等。它也广泛应用于科学计算和生物信息学领域...

    对python 匹配字符串开头和结尾的方法详解

    正则表达式提供了强大的模式匹配能力,但其语法相对复杂,初学者可能需要一定的时间来掌握。 例如,匹配前面提到的URL协议: ```python import re url = '***' if re.match('***', url): print('这是一个网络资源...

Global site tag (gtag.js) - Google Analytics