它是一个使用某种模式来匹配某种类型字符串的公式。 例如,要查找一篇文章中首字符为“罗”、末字符为“浩”的三个字符的名称,即“罗*浩”; 那么“罗*号”是一个公式,也叫模式(Pattern),本条就是要匹配的字符串(或文本)。 再比如,你想检查一个输入字符串是否是126个邮箱的格式,你就得制定一条规则来检查,而这些规则就是正则表达式。
我们先来看前面提到的一个反例:检查一个字符串是否符合126个邮箱的格式。
我们从网易邮箱注册页面可以看到javascript 字符是数字,126邮箱的用户名必须符合以下格式:6~18个字符javascript 字符是数字,可以使用字母、数字、下划线,并且必须以字母开头。 我们可以定义一个模式:^[a-zA-Z]w{5,17}@126.com
这种模式可以理解如下:
[a-zA-Z]:从a到z或A到Z的任意英文字母
^:表示以哪些开头,那么^[a-zA-Z]表示以字母开头
w:短语字符[a-zA-Z_0-9],即az或AZ或0-9或_中的任意字符
{5,17}:表示出现5到17次(至少5次,不超过17次),那么w{5,17}表示5到17个字符。
由于还有一个以非数字字母开头的字符,^[a-zA-Z]w{5,17}的意思是:“6~18个字符,字母、数字、下划线都可以使用,且必须以a开头信”
@126.com:表示满足上述规则的用户名后跟字符串@126.com组成电子邮件地址。
“^[a-zA-Z]w{5,17}@126.com”就是我们所说的正则表达式。 Java中的简单实现如下:
正则表达式常用符号
其中一个示例中使用的“^”、“w”和“{5,17}”是正则表达式中的常见符号,这些符号在正则表达式中具有特殊含义。 下表是Java中正则表达式常用符号的含义(只提取常用的部分进行说明,虽然这些部分可以解决正则表达式的大部分问题)。
参考文件:
这个常用的符号在各种编程语言的正则表达式中的含义基本相同(因为正则表达式的思想是一样的),所以都可以用作参数。 然而,不同的语言可能会有一些细微的差异。 如果你想对各种编程语言有更准确、权威的说明,可以参考官方文档:
C++(VS2013 编译器):#grammarsummary
爪哇:
JavaScript:
正则表达式的使用
下面根据常见需求介绍C++、Java、JavaScript中正则表达式的使用
>>>>
C++ 中的正则表达式
C++中正则表达式的实现形式主要有三种:C语言的实现方法(Cregex)、C++标准库的实现(C++regex)、Boost库的实现(boostregex)。 Cregex方法是面向过程的编程方法,使用起来不是很方便; C++ regex的方法可以直接使用,因为它是标准库的一部分(Linux平台下好像不支持),但是C++ Regex使用起来非常困难,而且句型要求比较严格,但是很多默认选项与我们正常的视图不同; Boost是一个开源的第三方库,在C++项目开发中特别优秀并被广泛使用。 boostregex 非常灵活易用,C++ 开发是你欣赏的形式。
现在以 C++ 正则表达式的形式列出了一个用法示例。
验证 IP 地址
>>>>
Java中的正则表达式
验证字符串是否为 URL
确定文本中有多少个 URL 并添加超链接。
比如下面这段文字:
C++(VS2013 编译器):#grammarsummary
爪哇:
JavaScript:
添加链接后就变成:
C++(VS2013编译器):
爪哇:
” >
JavaScript:
” >
>>>>
JavaScript 中的正则表达式
JavaScript 中的正则表达式是通过 RegExp 对象实现的。 RegExp 对象创建有三种形式:
简写:
/模式/属性
新形式:
newRegExp(模式, 属性);
函数调用方法:
RegExp(模式,属性);
参数pattern可以是模式字符串或RegExp对象。 如果模式本身是一个RegExp对象,则attributes参数将不起作用(新创建的对象的属性与模式对象相同。),需要省略,如果不省略会抛出TypeError异常。
参数属性有“g”、“i”和“m”三个属性,分别用于指定全局匹配、区分大小写匹配和多行匹配。
RegExp主要有以下三种方式:
验证字符串是否为数字