如何深入理解正则表达式中重复匹配的复杂用法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计994个文字,预计阅读时间需要4分钟。
原文示例讲述了正则表达式匹配的重复配置。以下为简写版:
正则示例阐述正则表达式匹配的重复配置。分享给家长参考,例如:
注意:在所有例子中,正则匹配结果包含源文本中的【和】之间的内容,有的例子会使用Java实现。
本文实例讲述了正则表达式教程之重复匹配。分享给大家供大家参考,具体如下:
注:在所有例子中正则表达式匹配结果包含在源文本中的之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。
一、有多少个匹配
前面几篇讲的都是匹配一个字符,但是一个字符或字符集合要匹配多次,应该怎么做呢?比如要匹配一个电子邮件地址,用之前说到的方法,可能有人会写出像\w@\w\.\w这样的正则表达式,但这个只能匹配到像a@b.c这样的地址,明显是不正确的,接下来就来看看如何匹配电子邮件地址。
首先要知道电子邮件地址的组成:以字母数字或下划线开头的一组字符,后面跟@符号,再后面是域名,即用户名@域名地址。不过这也跟具体的邮箱服务提供商有关,有的在用户名中也允许.字符。
1、匹配一个或多个字符
要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个+字符作为后缀就可以了。+匹配一个或多个字符(至少一个)。如:a匹配a本身,a+将匹配一个或多个连续出现的a;[0-9]+匹配多个连续的数字。
注意:在给一个字符集合加上+后缀的时候,必须把+放在字符集合的外面,否则就不是重复匹配了。如[0-9+]这样就表示数字或+号了,虽然语法上正确,但不是我们想要的了。
文本:Hello, mhmyqn@qq.com or mhmyqn@126.com is my email.
正则表达式:\w+@(\w+\.)+\w+
结果:Hello, or is my email.
分析:\w+可以匹配一个或多个字符,而子表达式(\w+\.)+可匹配像xxxx.edu.这样的字符串,而最后不会是.字符结尾,所以后面还会有一个\w+。像mhmyqn@xxxx.edu.cn这样的邮件地址也会匹配到。
2、匹配零个或多个字符
匹配零个或多个字符使用元符*,它的用法和+完全一样,只要把它放在一下字符或字符集合的后面,就可以匹配该字符(或字符集合)连续出现零次或多次。如正则表达式ab*c可以匹配ac、abc、abbbbbc等。
3、匹配零个或一个字符
匹配零个或一个字符使用元字符?。像上一篇说到的匹配一个空白行使用正则表达式\r\n\r\n,但在Unix和Linux中不需要\r,就可以使用元字符?,\r?\n\r?\n这样既可匹配windows中的空白行,也可匹配Unix和Linux中的空白行。下面来看一个匹配www.mikan.com, to connect securely use www.mikan.cominstead.
正则表达式:(\w+\.)+\w+
结果:The URL is , to connect securely use instead.
分析:这个模式以tools.jb51.net/regex/javascript
正则表达式在线生成工具:
tools.jb51.net/regex/create_reg
希望本文所述对大家正则表达式学习有所帮助。
本文共计994个文字,预计阅读时间需要4分钟。
原文示例讲述了正则表达式匹配的重复配置。以下为简写版:
正则示例阐述正则表达式匹配的重复配置。分享给家长参考,例如:
注意:在所有例子中,正则匹配结果包含源文本中的【和】之间的内容,有的例子会使用Java实现。
本文实例讲述了正则表达式教程之重复匹配。分享给大家供大家参考,具体如下:
注:在所有例子中正则表达式匹配结果包含在源文本中的之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。
一、有多少个匹配
前面几篇讲的都是匹配一个字符,但是一个字符或字符集合要匹配多次,应该怎么做呢?比如要匹配一个电子邮件地址,用之前说到的方法,可能有人会写出像\w@\w\.\w这样的正则表达式,但这个只能匹配到像a@b.c这样的地址,明显是不正确的,接下来就来看看如何匹配电子邮件地址。
首先要知道电子邮件地址的组成:以字母数字或下划线开头的一组字符,后面跟@符号,再后面是域名,即用户名@域名地址。不过这也跟具体的邮箱服务提供商有关,有的在用户名中也允许.字符。
1、匹配一个或多个字符
要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个+字符作为后缀就可以了。+匹配一个或多个字符(至少一个)。如:a匹配a本身,a+将匹配一个或多个连续出现的a;[0-9]+匹配多个连续的数字。
注意:在给一个字符集合加上+后缀的时候,必须把+放在字符集合的外面,否则就不是重复匹配了。如[0-9+]这样就表示数字或+号了,虽然语法上正确,但不是我们想要的了。
文本:Hello, mhmyqn@qq.com or mhmyqn@126.com is my email.
正则表达式:\w+@(\w+\.)+\w+
结果:Hello, or is my email.
分析:\w+可以匹配一个或多个字符,而子表达式(\w+\.)+可匹配像xxxx.edu.这样的字符串,而最后不会是.字符结尾,所以后面还会有一个\w+。像mhmyqn@xxxx.edu.cn这样的邮件地址也会匹配到。
2、匹配零个或多个字符
匹配零个或多个字符使用元符*,它的用法和+完全一样,只要把它放在一下字符或字符集合的后面,就可以匹配该字符(或字符集合)连续出现零次或多次。如正则表达式ab*c可以匹配ac、abc、abbbbbc等。
3、匹配零个或一个字符
匹配零个或一个字符使用元字符?。像上一篇说到的匹配一个空白行使用正则表达式\r\n\r\n,但在Unix和Linux中不需要\r,就可以使用元字符?,\r?\n\r?\n这样既可匹配windows中的空白行,也可匹配Unix和Linux中的空白行。下面来看一个匹配www.mikan.com, to connect securely use www.mikan.cominstead.
正则表达式:(\w+\.)+\w+
结果:The URL is , to connect securely use instead.
分析:这个模式以tools.jb51.net/regex/javascript
正则表达式在线生成工具:
tools.jb51.net/regex/create_reg
希望本文所述对大家正则表达式学习有所帮助。

