正则表达式
为什么使用正则表达式?
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
通过使用正则表达式,可以:
- 测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 - 替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。 - 基于模式匹配从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
非打印字符:
\cx:匹配一个Control-M或回车符。X的值必须为A-Z或a-z之一。否则,将c视为一个原意的’c’字符。
\f:匹配一个换页符
\n:匹配一个换行符
\r:匹配一个回车符
\s:匹配任何空白字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]。注意Unicode正则表达式会匹配全角空格符。
\S:匹配任何非空白字符,等价于[^ \f\n\r\t\v]
\t:一个制表符
\v:一个垂直制表符
\w:一个数字、字母、下划线或汉字
\d:一个汉字
特殊字符:
$ 匹配输入字符串的结尾位置,如果设置了RegExp对象的Multiline 属性, 则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符使用\(和\)
^匹配首个字母
[0-9]中间是匹配的内容如,即匹配单个数字,如果后面多了一个+即匹配多个数字。
+表示字符必修出现1次
*表示字符可以不出现或者出现
?只能出现0-1次
. 匹配除换行符之外的任何单字符。要匹配\.
\ 将下一个字符标记为或特殊字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 表示或。
限定符:
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
定位符:
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。
常用范围:
\u4e00-\u9fa5 代表中文范围
贪婪模式:
*能匹配0-多个
?0-1个
+ 1-多个
非贪婪模式:
*?能匹配0-多个(尽可能少)
+?能匹配1-多个(尽可能少)
??能匹配0-1个(尽可能少)
{1,40}代表最多只能重复1-40。
使用:?禁止捕获组匹配,从而提升正则的效率