2. 当前buffer中的regular搜索
1) 用regexp-builder可以方便的测试正则表达式
2) `*' `+':贪婪算法符,`*'`+'首先尽可能匹配最多的内容,后面的项再接着匹配,如
果失败,开始回溯,尝试减少`*'`+'的匹配,再匹配后面的项。如搜索`ca*ar',匹配
`caaar'时,`a*'第一次匹配了三个`a',只剩`r',第一次失败了,下一次尝试,`a*'匹
配两个`a',后面的'ar'也匹配成功,就搜索到了`caaar'
3) `*?' `+?':非贪婪算法符,`*?'`+?'首先匹配最少的内容,后面的项再接着匹配,如
果失败,开始回溯,尝试增加`*'`+'的匹配,再匹配后面的项。比较`ab*'和`ab*?',
都能匹配`a',`ab*'还能匹配`abbbb',但`ab*?'仅能匹配到`a';`ab*c'和`ab*?c'都能
匹配`abbbc'
4) \{0,1\}相当于`?';\{1,\}相当于`+';\{0,\}相当于`*'
5) [...]:字符集合,所有在集合内的字符都能匹配,如[ab]+,同时匹配多个连续
`a',多个连续`b';各种字符都能放入集合,有三个字符放入集合的位置有要求,`]'
`-' `^',`]'要放在集合的的第一个位置,`-'要放在集合的第一个或最后一个位
置,`^'除了在集合的第一个位置,别的位置都可以(`^'放在集合的第一个位置有特殊
意义)
6) [^...]:反字符集合,所有不在集合的字符都能匹配,如[^a-z0-9A-Z],能匹配除了
大小写字母、数字以处的所有字符
7) `\':用于引用特殊字符,如`\*' `\$' `\['等有特殊含义的字符,如
要匹配`a$b' `a*b' `a[b',要用`a\$b' `a\$b' `a\[b';注意:`\'不能引用
`]'`-',如[^\],含义是匹配除了`\'以外的所单字符
8) `\':用于以`\'开始有特殊意义的字符序列
- `\|':连接两个表达式A和B,A和B之间是或的关系,如`abc\|inf',匹配`abc'和`inf'
- `\(...\)' `\(?:...\)' `\D':分组和引用。`\(...\)'即有分组,又有引用功能,可用`\D'
引用前面出现的分组;`\(?:...\)'仅有分组功能;`\D'用1~9个数字表示表达式
前面出现的分组内容
- `\w'匹配单词字符,`\<'匹配单词开始,`\>'匹配单词结束, `\b'匹配单词开始和
结束
3.
当前buffer中的替换
1) M-x replace-string <RET> foo <RET> bar <RET>
- 替换小写`foo'为`bar'时,替换时自动转换大小写,将`FOO'替换为`BAR',`Foo'替换
为`Bar',自动识别全小写,全大写,首字母大写替换。不是这三种情况的替换为
`bar',如`fOO'被替换为`bar'
- 如果将`case-replace'设为`nil',替换将不转换大小写,上面的操作将
`foo'`FOO'`Foo'都替换为`bar'
2) M-x replace-regexp <RET> REGEXP <RET> NEWSTRING <RET>
- REGEXP和NEWSTRING都是正则表达式,NEWSTRING包含一些以`\'开始有特殊意义的
字符序列,\&代表整个REGEXP;\D(数字)代表REGEXP中的第`D'个分组内容;\?:让替
换毎次都询问
- 如要将`M-w M-s M-y M-u'替换为`C-M-w C-M-s C-M-y C-M-u',执行
`replace-regexp <RET> M-[wsyu]' <RET> C-\& <RET>
3) `M-%(query-replace)'`C-M-%(query-replace-regexp)'询问式替换