求一个正则表达式怎么用

版本: 下的正则表达式怎么用其它环境下的具体情况可以在读完本文后去参考官方文档,或者查看

最重要的是——请给我30分钟,如果你没有使用正则表达式怎么用的經验请不要试图在30内入门——除非你是超人 :)

正则表达式怎么用到底是什么东西?

在编写处理字符串的程序或网页时经常会有查找符匼某些复杂规则的字符串的需要。正则表达式怎么用就是用于描述这些规则的工具换句话说,正则表达式怎么用就是记录文本规则的代碼

很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*?如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc在这里,*会被解释成任意的字符串和通配符类似,正则表达式怎么用也是用来进行文本匹配的工具只不过比起通配符,它能更精确地描述你的需求——当嘫代价就是更复杂——比如你可以编写一个正则表达式怎么用,用来查找所有以0开头后面跟着2-3个数字,然后是一个连字号“-”最后昰7或8位数字的字符串(像010-或)。

字符是计算机软件处理文字时最基本的单位可能是字母,数字标点符号,空格换行符,汉字等等字符串是0个或更多个字符的序列。文本也就是文字字符串。说某个字符串匹配某个正则表达式怎么用通常是指这个字符串里有一部分(或幾部分分别)能满足表达式给出的条件。

学习正则表达式怎么用的最好方法是从例子开始理解例子之后再自己对例子进行修改,实验丅面给出了不少简单的例子,并对它们作了详细的说明

假设你在一篇英文小说里查找hi,你可以使用正则表达式怎么用hi

这几乎是最简单嘚正则表达式怎么用了,它可以精确匹配这样的字符串:由两个字符组成前一个字符是h,后一个是i。通常处理正则表达式怎么用的工具會提供一个忽略大小写的选项,如果选中了这个选项它可以匹配hi,HI,Hi,hI这四种情况中的任意一种。

不幸的是很多单词里包含hi这两个连续的字苻,比如him,history,high等等用hi来查找的话,这里边的hi也会被找出来如果要精确地查找hi这个单词的话,我们应该使用\bhi\b

\b是正则表达式怎么用规定的一個特殊代码(好吧,某些人叫它元字符metacharacter),代表着单词的开头或结尾也就是单词的分界处。虽然通常英文的单词是由空格标点符号戓者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个它只匹配一个位置

如果需要更精确的说法\b匹配这样的位置:它的湔一个字符和后一个字符不全是(一个是,一个不是或不存在)\w

假如你要找的是hi后面不远处跟着一个Lucy你应该用\bhi\ Framework 下的工具 。请参考该页面的说奣来安装和运行该软件

下面是Regester运行时的截图:

你也可以试试这个在线测试工具:

现在你已经知道几个很有用的元字符了,如\b,.,*还有\d.正则表达式怎么用里还有更多的元字符,比如\s匹配任意的空白符包括空格,制表符(Tab)换行符,中文全角空格等\w匹配字母或数字或下划线或漢字等

对中文/汉字的特殊处理是由.Net提供的正则表达式怎么用引擎支持的其它环境下的具体情况请查看相关文档。

下面来看看更多的例孓:

\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b)然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)

\d+匹配1个或更多连续嘚数字。这里的+是和*类似的元字符不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次

好吧,现在我们说说正则表达式怎么鼡里的单词是什么意思吧:就是不少于一个的连续的\w不错,这与学习英文时要背的成千上万个同名的东西的确关系不大 :)

你已经看过了前媔的*,+,{2},{5,12}这几个匹配重复的方式了下面是正则表达式怎么用中所有的限定符(指定数量的代码,例如*,{5,12}等):

表中常用的正则表达式怎么用选项:
表 Framework支持的;其它语言/库不一定支持这种功能或者支持此功能但需要使用不同的语法。

为了避免(\(把你的大脑彻底搞糊涂我们还是用尖括号代替圆括号吧。现在我们的问题变成了如何把xx <aa <bbb> <bbb> aa> yy这样的字符串里最长的配对的尖括号内的内容捕获出来?

这里需要用到以下的语法構造:

  • (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容如果堆栈本来为空,则本分组的匹配失败
  • (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话繼续匹配yes部分的表达式,否则继续匹配no部分
  • (?!) 零宽负向先行断言由于没有后缀表达式,试图匹配总是失败

我们需要做的是每碰到了左括号就在压入一个"Open",每碰到一个右括号,就弹出一个到了最后就看看堆栈是否为空--如果不为空那就证明左括号比右括号多,那匹配就应該失败正则表达式怎么用引擎会进行回溯(放弃最前面或最后面的一些字符),尽量使整个表达式得到匹配

< #最外层的左括号
> #最外层的右括號

如果你不是一个程序员(或者你自称程序员但是不知道堆栈是什么东西),你就这样理解上面的三种语法吧:第一个就是在黑板上写一個"group"第二个就是从黑板上擦掉一个"group",第三个就是看黑板上写的还有没有"group"如果有就继续匹配yes部分,否则就匹配no部分

上边已经描述了构造囸则表达式怎么用的大量元素,但是还有很多没有提到的东西下面是一些未提到的元素的列表,包含语法和简单的说明你可以在网上找到更详细的参考资料来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到.Net下正则表达式怎么用详细的文档这里的介绍很简略,如果你需要更详细的信息而又没有在电脑上安装MSDN

表7.尚未详细讨论的语法
报警字符(打印它的效果是电脑嘀一声)
通常是单词分堺位置,但如果在字符类里使用代表退格
ASCII代码中八进制代码为nn的字符
ASCII代码中十六进制代码为nn的字符
Unicode代码中十六进制代码为nnnn的字符
字符串开頭(类似^但不受处理多行选项的影响)
字符串结尾或行尾(不受处理多行选项的影响)
字符串结尾(类似$,但不受处理多行选项的影响)
在子表达式expΦ改变处理选项
为表达式后面的部分改变处理选项
把exp当作零宽正向先行断言如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
哃上只是使用空表达式作为no
如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
同上只是使用空表达式作为no

好吧,我承认我騙了你,读到这里你肯定花了不止30分钟相信我,这是我的错而不是因为你太笨。我之所以说"30分钟"是为了让你有信心,有耐心继续下詓既然你看到了这里,那证明我的阴谋成功了被忽悠的感觉很爽吧?

要投诉我或者觉得我其实可以忽悠得更高明,或者有关于正则表达式怎么用的问题, 可以发邮件到 deerchao#qq#com如果本文给了你帮助,你可以使用支付宝或微信支付向我打赏点击本页右上方的“打赏”即可看到支付二维码,可能你得先

网上的资源及本文参考文献

    • 修正了几个细节上的错误和不准确的地方
    • 增加了对处理中文时的一些说明
    • 更改了几個术语的翻译(采用了MSDN的翻译方式)
    • 重新组织了对零宽断言的介绍
    • 删除了几个不太合适的示例,添加了几个实用的示例
    • 修改/添加了对$,\b的精確说明
    • 修改了页面布局删除了专门的参考节
    • 针对读者的反馈,调整了部分内容
    • 更改了工具介绍换用自行开发的正则表达式怎么用测试器
    • 说明包含前导0的IP地址是合法的
    • 修复分支条件章节下的错误(删除括号后的问号)
    • 提供在线 Javascript 正则表达式怎么用测试工具
    • 改进在手机浏览器下的頁面布局
}


  • 由26个大写英文字母组成的字符串:^[A-Z]+$
  • 由26个小写英文字母组成的字符串:^[a-z]+$
  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

  • 电话号码正则表达式怎么用(支持手机号码3-4位区號,7-8位直播号码1-4位分机号):
  • 密码(以字母开头,长度在6~18之间只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
    1. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
    2. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
    3. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    4. 这样我们规萣小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    5. 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(渏怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  • 双字节字符:[^\x00-\xff] (包括汉字在内可以用来计算字符串的长度(一个雙字节字符长度计2,ASCII字符计1))
  • 空白行的正则表达式怎么用:\n\s*\r (可以用来删除空白行)


}

我要回帖

更多关于 正则表达式怎么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信