Notepad++正则表达式使用(转)


正则表达式,提供复杂 并且弹性的查找与替换

注意: 不支持多行表达式 (involving \n, \r, etc).

1 基本表达式

符号解释
.匹配任意字符,除了新一行(\n)。也就是说 “.”可以匹配 \r ,当文件中同时含有\r and \n时,会引起混乱。要匹配所有的字符,使用\s\S。
(…)这个匹配一个标签区域. 这个标签可以被访问,通过语法 \1访问第一个标签, \2 访问第二个, 同理 \3 \4 … \9。 这些标签可以用在当前正则表达式中,或则替search和replace中的换字符串。
\1, \2, etc在替换中代表1到9的标签区域(\1 to \9)。例如, 查找字符串 Fred([1-9])XXX 并替换为字符串 Sam\1YYY的方法,当在文件中找到Fred2XXX的字符串时,会替换为Sam2YYY。注意: 只有9个区域能使用,所以我们在使用时很安全,像\10\2 表示区域1和文本”0”以及区域2。
[…]表示一个字符集合, 例如 [abc]表示任意字符 a, b or c.我们也可以使用范围例如[a-z] 表示所以的小写字母。
[^…]表示字符补集. 例如, [^A-Za-z] 表示任意字符除了字母表。
^匹配一行的开始(除非在集合中, 如下).
$匹配行尾.
*匹配0或多次, 例如 Sa*m 匹配 Sm, Sam, Saam, Saaam 等等.
+匹配1次或多次,例如 Sa+m 匹配 Sam, Saam, Saaam 等等.
?匹配0或者1次, 例如 Sa?m 匹配 Sm, Sam.
{n}匹配确定的 n 次.例如, ‘Sa{2}m’ 匹配 Saam.
{m,n}匹配至少m次,至多n次(如果n缺失,则任意次数).例如, ‘Sa{2,3}m’ 匹配 Saam or Saaam. ‘Sa{2,}m’ 与 ‘Saa+m’相同
*?, +?, ??, {n,m}?非贪心匹配,匹配第一个有效的匹配,通常 ‘<.>’ 会匹配整个 ‘content’字符串 –但 ‘<.?>’ 只匹配 ” .这个标记一个标签区域,这些区域可以用语法\1 \2 等访问多个对应1-9区域。

2 标记和分组

符号解释
(…)一组捕获. 可以通过\1 访问第一个组, \2 访问第二个.
(?:…)非捕获组.
(?=…)非捕获组 – 向前断言. 例如’(.*)(?=ton)’ 表达式,当 遇到’Appleton’字符串时,会匹配为’Apple’.
(?<=…)非捕获组 – 向后断言. 例如’(?<=sir) (.*)’ 表示式,当遇到’sir William’ 字符串时,匹配为’ William’.
(?!…)非捕获组 – 消极的向前断言. 例如’.(?!e)’ 表达式,当遇到’Apple’时,会找到每个字母除了 ‘l’,因为它紧跟着 ‘e’.
(?非捕获组 – 消极向后断言. 例如 ‘(?
(?P…)命名所捕获的组. 提交一个名称到组中供后续使用,例如’(?PA[^\s]+)\s(?P=first)’ 会找到 ‘Apple Apple’. 类似的 ‘(A[^\s]+)\s\1’ 使用组名而不是数字.
(?=name)匹配名为name的组. (?P…).
(?#comment)批注 –括号中的内容在匹配时将被忽略。

3 特殊符号

符号解释
\s匹配空格. 注意,会匹配标记的末尾. 使用 [[:blank:]] 来避免匹配新一行。
\S匹配非空白
\w匹配单词字符
\W匹配非单词字符
\d匹配数字字符
\D匹配非数字字符
\b匹配单词边界. ‘\bW\w+’ 找到W开头的单词
\B匹配非单词边界. ‘\Be\B+’ – 找到位于单子中间的字母’e’
\<This matches the start of a word using Scintilla’s definitions of words.
>This matches the end of a word using Scintilla’s definition of words.
\x运行用x来表达可能具有其他意思的字符。例如, [ 用来插入到文本中作为[ 而不是作为字符集的开始.

4 字符类

符号解释
[[:alpha:]]匹配字母字符: [A-Za-z]
[[:digit:]]匹配数字字符: [0-9]
[[:xdigit:]]匹配16进制字符: [0-9A-Fa-f]
[[:alnum:]]匹配字母数字字符: [0-9A-Za-z]
[[:lower:]]匹配小写字符: [a-z]
[[:upper:]]匹配大写字符: [A-Z]
[[:blank:]]匹配空白 (空格 or tab):[ \t]
[[:space:]]匹配空白字符:[ \t\r\n\v\f]
[[:punct:]]匹配标点字符: [-!”#$%&’()*+,./:;<=>?@[]_`{
[[:graph:]]匹配图形字符: [\x21-\x7E]
[[:print:]]匹配可打印的字符 (graphical characters and spaces)
[[:cntrl:]]匹配控制字符

5 替换操作

使用正则表达式的标记,通过()来包围想要用的字符,然后用\1 来替换字符串,第一个匹配文本。

例如:

Text bodySearch stringReplace stringResult
Hi my name is Fredmy name is (.+)my name is not \1Hi my name is not Fred
The quick brown fox jumped over the fat lazy dogbrown (.+) jumped over the (.+)brown \2 jumped over the \1The quick brown fat jumped over the fox lazy dog

6 限制

Support for regular expressions in PN2 is currently limited, the supported patterns and syntax are a very small subset of the powerful expressions supported by perl. 最大的限制是正则表达式只能匹配单行,不能用多行匹配表达。可以用Backslash Expressions代替.

准备计划是使用PCRE库 library (used elsewhere in PN2) 来支持文档搜索.

from http://www.pnotepad.org/docs/search/regular_expressions/


注意:Notepad++正则表达式字符串最长不能超过69个字符

\   转义字符  如:要使用 “\” 本身, 则应该使用“\\”

\t  Tab制表符  :扩展和正则表达式都支持

\r  回车符CR   :扩展支持,正则表达式不支持

\n  换行符LF   :扩展支持,正则表达式不支持

.  匹配任意一个字符

^ 其右边的表达式被匹配在行首。如:^A匹配以“A”开头的行

$ 其左边的表达式被匹配在行尾。如:e$匹配以“e”结尾的行

|  或运算符,匹配表达式左边和右边的字符串。如:ab|bc匹配“ab”或“bc”

[] 匹配列表中任意单个字符。如:[ab]匹配“a”或“b”;[0-9]匹配任意单个数字

[^] 匹配列表之外的任意单个字符。如:[^ab]匹配“a”和“b”以外的单个字符;[^0-9]匹配任意单个非数字字符

* 其左边的字符被匹配任意次(0次或多次)。如:be*匹配“b”,“be”或“bee”

+ 其左边的字符被匹配至少一次(1次或多次)。如:be+匹配“be”或“bee”,但不匹配“b”

? 其左边的字符被匹配0次或者1次。如:be?匹配“b”或“be”,但不匹配“bee”;\r?\n匹配行结尾符

() 影响表达式匹配的顺序(类似C++的小括号会影响表达式运算顺序),并且用作表达式的分组标记(标记从1开始)如:([a-z]bc)smn\1匹配“tbcsmntbc”;另见:看下文的示例

{} 指定前面的字符或分组的出现次数  如:abc{3}匹配abccc;a(bc){2}匹配abcbc

\d 匹配一个数字字符。等价于:[0-9]

\D \d取反,匹配一个非数字字符。等价于:[^0-9]

\s 匹配任意单个空白字符:包括空格、制表符等(注:不包括换车符和换行符)。等价于:[ \t]

\S  \s取反的任意单个字符。

\w 匹配包括下划线的任意单个字符。等价于:[A-Za-z0-9_]

\W \w取反的任意单个字符。等价于:[^A-Za-z0-9_]

\b 匹配单词起始处或结尾处  如:\bin匹配int,但不匹配sing


暂无留言,赶快评论吧

欢迎留言