{_,P}=re:compile("[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-z]{2,3}"). 或者 {_,P}=re:compile("[a-zA-Z0-9]+@[a-zA-Z0-9]+[\.][a-z]{2,3}").
re:run("E-mail: xyz@pdq.com",P).
{match,[{8,11}]}
re:run("E-mail: xyz@pd0q@we.com",[{12,11}]}
re:split("E-mail: xyz@pdq.com"," ").
[<<"E-mail:">>,<<"xyz@pdq.com">>]
———————————————————————————————— 分割线 ——————————————————————————————————————
- 1导出函数
- 1.1match(String,RegExp) -> MatchRes
- 1.2first_match(String,RegExp) -> MatchRes
- 1.3matches(String,RegExp) -> MatchRes
- 1.4sub(String,RegExp,New) -> SubRes
- 1.5gsub(String,New) -> SubRes
- 1.6split(String,RegExp) -> SplitRes
- 1.7sh_to_awk(ShRegExp) -> AwkRegExp
- 1.8parse(RegExp) -> ParseRes
- 1.9format_error(ErrorDescription) -> Chars
- 2正则表达式
- 3作者
应用于字符串的正则表达式函数。
1导出函数
String=RegExp=string()
MatchRes={match,Start,Length} | nomatch | {error,errordesc()}
Start=Length=integer()
在字符串String中寻找正则表达式RegExp的第一个最长的匹配。搜索最长可能匹配,如果几个结果相同则返回第一个。返回如下:
- {match,Length}:匹配成功,返回开始和长度。
- nomatch:无法匹配。
- {error,Error}:发生错误。
寻找第一个匹配,通常比 match 更快,并确定匹配的存在与否。返回值同 match 。
返回所有的不重叠匹配结果,返回如下:
{error,Error}:正则表达式有错。
String=RegExp=New=string()
SubRes={ok,NewString,RepCount} | {error,errordesc()}
RepCount=integer
将第一个匹配成功的子字符串替换成New。字符串New中的 & 符号代表被替换掉的字符串,而 & 则代表原来的 & 符号。返回结果如:
- {ok,RepCount}:如果正则表达式正确,则RepCount为替换执行的次数,为0或1。
- {error,Error}:正则表达式有误。
基本等同于 sub ,不同在于所有的不重叠会被替换,而不仅仅是替换一次。
String=RegExp=string()
SubRes={ok,FieldList} | {error,errordesc()}
FieldList=[string()]
通过正则表达式将字符串切割成多个字段。如果分隔字符是空格 ” ” ,则分隔字符也隐含包括TAB字符。其他分隔字符没有此效应。返回值如下:
{error,102);line-height:26px;"> 1.7sh_to_awk(ShRegExp) -> AwkRegExp
ShRegExp=AwkRegExp=string()
SubRes={ok,errordesc()}
RepCount=integer()
转换sh类型的正则表达式到awk类型的正则表达式。返回转换过的字符串。sh正则表达式是给shell用于匹配文件名用的,支持如下特殊字符:
-
- :匹配任何数量任何字符
- ? :匹配单一任意字符
- […] :匹配范围内的字符,字符范围用符号 - 来分隔。如果第一个字符是 ! 则是相反的匹配。
尽管sh正则表达式并不强大,但在大多数时候却很好用。
1.8parse(RegExp) -> ParseRes
RegExp=string()
ParseRes={ok,RE} | {error,errordesc()}
转换正则表达式字符串到可供其他正则表达式函数使用的内部格式。可以在调用其他函数时替换正则表达式的位置。这对于同一个正则表达式需要使用多次时非常有效。返回值:
{error,102);line-height:26px;"> 1.9format_error(ErrorDescription) -> Chars
ErrorDescriptor=errordesc()
Chars=[char() | Chars]
在匹配失败时返回匹配错误的描述信息。
2正则表达式
这里提到的正则表达式知识egrep和AWK语言中的子集。他们由如下字符组成:
- {match,Length}:匹配成功,返回开始和长度。
- nomatch:无法匹配。
- {error,Error}:发生错误。
返回所有的不重叠匹配结果,返回如下:
{error,Error}:正则表达式有错。
String=RegExp=New=string()
SubRes={ok,NewString,RepCount} | {error,errordesc()}
RepCount=integer
将第一个匹配成功的子字符串替换成New。字符串New中的 & 符号代表被替换掉的字符串,而 & 则代表原来的 & 符号。返回结果如:
- {ok,RepCount}:如果正则表达式正确,则RepCount为替换执行的次数,为0或1。
- {error,Error}:正则表达式有误。
基本等同于 sub ,不同在于所有的不重叠会被替换,而不仅仅是替换一次。
String=RegExp=string()
SubRes={ok,FieldList} | {error,errordesc()}
FieldList=[string()]
通过正则表达式将字符串切割成多个字段。如果分隔字符是空格 ” ” ,则分隔字符也隐含包括TAB字符。其他分隔字符没有此效应。返回值如下:
{error,102);line-height:26px;"> 1.7sh_to_awk(ShRegExp) -> AwkRegExp
ShRegExp=AwkRegExp=string()
SubRes={ok,errordesc()}
RepCount=integer()
转换sh类型的正则表达式到awk类型的正则表达式。返回转换过的字符串。sh正则表达式是给shell用于匹配文件名用的,支持如下特殊字符:
-
- :匹配任何数量任何字符
- ? :匹配单一任意字符
- […] :匹配范围内的字符,字符范围用符号 - 来分隔。如果第一个字符是 ! 则是相反的匹配。
尽管sh正则表达式并不强大,但在大多数时候却很好用。
1.8parse(RegExp) -> ParseRes
RegExp=string()
ParseRes={ok,RE} | {error,errordesc()}
转换正则表达式字符串到可供其他正则表达式函数使用的内部格式。可以在调用其他函数时替换正则表达式的位置。这对于同一个正则表达式需要使用多次时非常有效。返回值:
{error,102);line-height:26px;"> 1.9format_error(ErrorDescription) -> Chars
ErrorDescriptor=errordesc()
Chars=[char() | Chars]
在匹配失败时返回匹配错误的描述信息。
2正则表达式
这里提到的正则表达式知识egrep和AWK语言中的子集。他们由如下字符组成:
SubRes={ok,NewString,RepCount} | {error,errordesc()}
RepCount=integer
将第一个匹配成功的子字符串替换成New。字符串New中的 & 符号代表被替换掉的字符串,而 & 则代表原来的 & 符号。返回结果如:
- {ok,RepCount}:如果正则表达式正确,则RepCount为替换执行的次数,为0或1。
- {error,Error}:正则表达式有误。
基本等同于 sub ,不同在于所有的不重叠会被替换,而不仅仅是替换一次。
String=RegExp=string()
SubRes={ok,FieldList} | {error,errordesc()}
FieldList=[string()]
通过正则表达式将字符串切割成多个字段。如果分隔字符是空格 ” ” ,则分隔字符也隐含包括TAB字符。其他分隔字符没有此效应。返回值如下:
{error,102);line-height:26px;"> 1.7sh_to_awk(ShRegExp) -> AwkRegExp
ShRegExp=AwkRegExp=string()
SubRes={ok,errordesc()}
RepCount=integer()
转换sh类型的正则表达式到awk类型的正则表达式。返回转换过的字符串。sh正则表达式是给shell用于匹配文件名用的,支持如下特殊字符:
-
- :匹配任何数量任何字符
- ? :匹配单一任意字符
- […] :匹配范围内的字符,字符范围用符号 - 来分隔。如果第一个字符是 ! 则是相反的匹配。
尽管sh正则表达式并不强大,但在大多数时候却很好用。
1.8parse(RegExp) -> ParseRes
RegExp=string()
ParseRes={ok,RE} | {error,errordesc()}
转换正则表达式字符串到可供其他正则表达式函数使用的内部格式。可以在调用其他函数时替换正则表达式的位置。这对于同一个正则表达式需要使用多次时非常有效。返回值:
{error,102);line-height:26px;"> 1.9format_error(ErrorDescription) -> Chars
SubRes={ok,FieldList} | {error,errordesc()}
FieldList=[string()]
通过正则表达式将字符串切割成多个字段。如果分隔字符是空格 ” ” ,则分隔字符也隐含包括TAB字符。其他分隔字符没有此效应。返回值如下:
{error,102);line-height:26px;"> 1.7sh_to_awk(ShRegExp) -> AwkRegExp
SubRes={ok,errordesc()}
RepCount=integer()
-
- :匹配任何数量任何字符
- ? :匹配单一任意字符
- […] :匹配范围内的字符,字符范围用符号 - 来分隔。如果第一个字符是 ! 则是相反的匹配。
ParseRes={ok,RE} | {error,errordesc()}
ErrorDescriptor=errordesc()
Chars=[char() | Chars]
在匹配失败时返回匹配错误的描述信息。
2正则表达式
这里提到的正则表达式知识egrep和AWK语言中的子集。他们由如下字符组成:
c | 非特殊意义的字母c |
\c | 匹配转码序列或字面上的c |
. | 匹配任意字符 |
^ | 字符串开头 |
$ | 字符串结尾 |
[abc…] | 字符类,即指定字符组成的集合。字符范围是两个字符用 - 连接 |
[^abc…] | 否定字符类,不匹配集合中的字符 |
r1 | r2 | 轮流,匹配r1或r2 |
r1r2 | 串联,匹配r1并且r2 |
r+ | 匹配一个或更多的r |
r* | 匹配零个或多个的r |
r? | 匹配零个或一个的r |
|
分组,匹配r |
转码序列允许等同于Erlang字符串:
\b | 退格 |
\f | 换页(form Feed) |
\n | 换行(line Feed) |
\r | 回车 |
\t | TAB |
\e | escape ESC |
\v | 纵向TAB |
\s | 空格 |
\d | 删除 |
\ddd | 八进制值ddd |
\c | 任何除了上面字符以外的,如\或” |
可以让这些函数工作的更方便,比如在 io:get_line 中读取新行,当然字符 $ 也会匹配 “…n” 。如下例子时Erlang一些数据类型的正则表达式:
Atoms | [a-z][0-9a-zA-Z_]* |
Variables | [A-Z_][0-9a-zA-Z_]* |
Floats | (\+|-)?[0-9]+\.[0-9]+((E|e)(\+|-)?[0-9]+)? |
正则表达式是以Erlang字符串来编写的。这意味着字符 \ 或 ” 必须以转码方式来书写。例如浮点数的正则表达式就是:(\\+|-)?[0-9]+\\.[0-9]+((E|e)(\\+|-)?[0-9]+)?。