本文共 1745 字,大约阅读时间需要 5 分钟。
正则表达式易于使用,功能强大,可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等。您还可以从网页或文档中提取电话号码,邮政编码等,在日志文件中搜索复杂的模式,然后您就可以想象得到。支持用户自定义正则表达式而无需重新编译程序即可更改规则(模板)。
任何单个字符都匹配自己。
一系列字符与输入字符串中的那一系列字符匹配。
正则表达式 | 火柴 |
---|---|
foobar | foobar |
要在正则表达式中表示不可打印的字符,请使用\x..
:
正则表达式 | 火柴 |
---|---|
\xnn | 十六进制字符 nn |
\x{nnnn} | 带有十六进制代码的字符nnnn (一个字节用于纯文本,两个字节用于Unicode) |
foo\x20bar | foo bar (注意中间的空格) |
有很多escape-codes
针对不可打印字符的预定义,就像C
语言中一样:
正则表达式 | 火柴 |
---|---|
\t | 标签(HT / TAB),与 \x09 |
\n | 换行(NL),与 \x0a |
\r | car.return(CR),与 \x0d |
\f | 换页(FF),与 \x0c |
\a | 警报(BEL),与 \x07 |
\e | 转义(ESC),与 \x1b |
\cx | 控制转义序列( Ctrl-x ) 例如, \ci 匹配目标序列 \x09 ,因为ctrl-i 具有价值0x09 |
如果您想单独使用字符\
(而不是字符)escape-code
,只需在字符前加上\
,例如:\\
。
实际上,您可以在正则表达式中使用具有特殊含义的任何字符作为前缀(或escape
)\
。
正则表达式 | 火柴 |
---|---|
\^FooBarPtr | ^FooBarPtr |
\[a\] | [a] |
字符类是其中的字符列表[]
。该类别与该类别中列出的任何一个字符匹配。
正则表达式 | 火柴 |
---|---|
foob[aeiou]r | foobar ,foober 等,但不foobbr ,foobcr 等等 |
您可以invert
在类-如果后的第一个字符[
是 ^
,那么类匹配任何字符,但在类中列出的字符。
正则表达式 | 火柴 |
---|---|
foob[^aeiou]r | foobbr ,foobcr 等,但不foobar ,foober 等等 |
在列表中,该-
字符用于指定范围,因此 a-z
表示介于a
和之间的所有字符z
(含)。
如果你希望-
自己是一个类的成员,把它在列表的开始或结束,或用反斜杠它。
如果你想]
作为类的一部分,您可以将其放置在列表的开头或用反斜杠它。
正则表达式 | 火柴 |
---|---|
[-az] | a ,z 和- |
[az-] | a ,z 和- |
[a\-z] | a ,z 和- |
[a-z] | 从人物a 到z |
[\n-\x0D] | 从人物#10 到#13 |
有许多预定义的字符类,它们使正则表达式更加紧凑。
正则表达式 | 火柴 |
---|---|
\w | 字母数字字符(包括_ ) |
\W | 非字母数字 |
\d | 数字字符(与相同[0123456789] ) |
\D | 非数字 |
\s | 任何空格(与相同)[ \t\n\r\f] |
\S | 一个非空间 |
\h | 水平空白。标签和所有字符 在“空格分隔符” Unicode类别中。 |
\H | 不是水平的空格 |
\v | 垂直空白。所有字符均视为 Unicode标准中的换行符。 |
\V | 不是垂直空格 |
您可以使用\w
,`\W
,\d
,\D
,\h
,\H
,\v
,\V
,\s
,\S字符串
。
正则表达式 | 火柴 |
---|---|
foob\dr | foob1r ,foob6r 等等,但不foobar ,foobbr 等等 |
foob[\w\s]r | foobar ,,等但不,等等foob r foobbr foob1r foob=r |
注
正则表达式 | 火柴 |
---|---|
^ | 行首 |
$ | 行结束 |
\A | 文字开头 |
\Z | 文字结尾 |
. | 一行中的任何字符 |
^foobar | foobar 只有在行的开头 |
foobar$ | foobar 只有在行尾 |
^foobar$ | foobar 仅当它是行中的唯一字符串时 |
foob.r | foobar ,foobbr ,foob1r 等 |
^
默认情况下,元字符与输入字符串的开头匹配。$
- 结束。
但是,您可能希望将字符串视为多行文本,因此^
将在字符串内的任何行分隔符之后匹配,并且$
在任何行分隔符之前匹配。您可以通过切换修饰符/m来实现。
请注意,序列中没有空行\x0D\x0A
。
转载地址:http://fjro.baihongyu.com/