手机版

实用正则表达式匹配替换百科

时间:2021-09-12 来源:互联网 编辑:宝哥软件园 浏览:

正则表达式非常有用,比如查找、匹配、处理字符串、替换转换字符串、输入输出等。并且它受到各种语言的支持,例如。NET常规库、JDK常规包、Perl、JavaScript等脚本语言。让我们整理一些常见的正则表达式。

性格;角色;字母

形容

\将下一个字符标记为特殊字符、文字字符、向后引用或八进制转义字符。例如,“n”与字符“n”匹配。“n”匹配新的行字符。序列“\ \”匹配“\”和“\”(“匹配“(”)。匹配输入字符串的起始位置。如果设置了RegExp对象的Multiline属性,它也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。*匹配前面的子表达式零次或多次。例如,zo*可以匹配“z”和“zoo”。*相当于{0,}。将前面的子表达式匹配一次或多次。例如,“zo”可以匹配“zo”和“zoo”,但不能匹配“z”。相当于{1,}。匹配前面的子表达式零次或一次。例如“做”?您可以在“do”或“does”中匹配“do”。相当于{0,1}。{n} n是非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但可以匹配“food”中的两个o。{n,} n是非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但可以匹配“foooood”中的所有“o”。“O{1,}”相当于“o”。“O{0,}”相当于“o*”。{n,m} m和n为非负整数,其中n=m,至少匹配n次,最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。O{0,1}相当于“o”。请注意,逗号和两个数字之间不能有空格。当该字符后跟任何其他分隔符(*,{n},{n,},{n,m}),匹配模式是非贪婪的。非贪婪模式尽可能少地匹配搜索到的字符串,而默认贪婪模式尽可能多地匹配搜索到的字符串。例如,对于字符串“oooo”、“o?”将匹配单个“o”,而“o”将匹配所有“o”。匹配除“\n”以外的任何单个字符。若要匹配包括“\n”在内的任何字符,请使用像“[”这样的模式。\n]'。(pattern)匹配该模式并获得该匹配。获得的matches可以从生成的Matches集合中获得,该集合在VBScript中使用,在JScript中使用$0…$9属性。若要匹配括号字符,请使用“\(”或“\”)。(?pattern)匹配该模式但没有获得匹配结果,也就是说,它是非获取的匹配,不会存储以备将来使用。当使用“或”字符(|)来组合模式的各个部分时,这很有用。例如,‘industr tr(?y|ies)是比“工业|工业”更简单的表达。(?=pattern),匹配任何字符串匹配模式开头的搜索字符串。这是非采集匹配,也就是说,该匹配不需要采集以备后用。例如,Windows(?=95|98|NT|2000)可以匹配“Windows 2000”中的“Windows”,但不能匹配“Windows 3.1”中的“Windows”。预搜索不消耗字符,也就是说,在匹配发生后,对下一个匹配的搜索会在最后一个匹配后立即开始,而不是在包含预搜索字符后开始。(?模式),并匹配任何与模式不匹配的字符串开头的搜索字符串。这是非采集匹配,也就是说,该匹配不需要采集以备后用。例如Windows(?95|98|NT|2000)可以匹配“Windows 3.1”中的“Windows”,但不能匹配“Windows 2000”中的“Windows”。预搜索不消耗字符,也就是说,在匹配发生后,对下一个匹配的搜索会在最后一个匹配后立即开始,而不是在包含预搜索字符后开始x|y来匹配x或y。例如,“z|food”可以与“z”或“food”匹配。(z|f)ood '匹配“缩放”或“食物”。[xyz]字符集。匹配任何一个包含的字符。例如,'[abc]'可以在' plain '中匹配' a '。[XYZ]一组负面人物。匹配任何未包含的字符。

例如,'[ABC]'可以与' plain '中的' p '匹配。[a-z]字符范围。匹配指定范围内的任何字符。例如,'[a-z]'可以匹配“a”到“z”范围内的任何小写字母字符。[a-z]负字符范围。匹配指定范围之外的任何字符。例如,'[a-z]'可以匹配“a”到“z”范围之外的任何字符。\b匹配单词边界,即单词和空格之间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。\ b匹配非单词边界。“Er\B”可以匹配“动词”中的“Er”,但不能匹配“never”中的“er”。\cx匹配x指示的控制字符。例如,\cM匹配控制-M或回车。x的值必须是a-z或A-Z之一.否则,c被认为是一个原始的c字符。\d匹配一个数字字符。相当于[0-9]。\D匹配一个非数字字符。相当于[0-9]。\f匹配分页符。相当于\x0c和\cL。\ n匹配新的行字符。相当于\x0a和\cJ。\r匹配回车符。相当于\x0d和\cM。\s匹配任何空白字符,包括空格、制表符、分页符等。相当于[\f\n\r\t\v]。\S匹配任何非空白字符。相当于[\ f \ n \ r \ t \ v]。

\ t匹配选项卡。相当于\x09和\cI。\v匹配垂直制表符。相当于\x0b和\cK。\ w匹配任何单词字符,包括下划线。相当于“[A-Za-z0-9_]”。\ w匹配任何非单词字符。相当于“[a-za-z0-9 _]”。\xn匹配n,其中n是十六进制转义值。十六进制转义值的长度必须是两位数。例如,“匹配”a。\x041 '相当于' \x04' '1 '。ASCII编码可以用在正则表达式中。\num匹配num,其中num是正整数。对获得的匹配的引用。例如,'(。)\1 '匹配两个连续的相同字符。\n标识八进制转义值或向后引用。如果在\n之前至少有n个获得的子表达式,则n是向后引用。否则,如果n是八进制数(0-7),则n是八进制转义值。\nm标识八进制转义值或反向引用。如果在\nm之前至少有nm子表达式,则nm是反向引用。如果在\nm之前至少有n次提取,则n是后接文本m的反向引用。如果不满足前面的条件,如果n和m都是八进制数(0-7),\nm将匹配八进制转义值nm。\nml如果n是八进制数(0-3),m和l都是八进制数(0-7),则匹配八进制转义值nml。/i使正则表达式不区分大小写。(?-i)关闭不区分大小写(?i)te(?-i)st应该匹配TEst,但它不能匹配teST或TEST。/s打开“单线模式”,即点“.”匹配新的行字符/m打开“多行模式”,也就是说,“”和“$”匹配新行字符的前后位置。[0-9] * $只能输入数字\ d {n} $只能输入n位数\ d {n,} $只能输入至少n位数\ d {m,n} $只能输入m~n位数(0 | [1-9] [0-9] *。您只能输入正实数[0-9](。[0-9] {1,3})带两位小数。只能输入小数点后1~3位的正实数。[1-9][0-9]*$您只能输入非零正整数\-[1-9] [] 0-9' * $您只能输入非零负整数。{3} $您只能输入长度为3的字符[a-za-z] $您只能输入由26个英文字母组成的字符串[a W $您只能输入由数字、26个英文字母或下划线组成的字符串[a-za-z] \ w {5,17} $验证用户密码:它以字母开头,长度在6到18之间,并且只能包含字符、数字和下划线。[^%',=?$\x22]验证它是否包含“%”。=?只有汉字\ w([-]。]\ w)* @ \ w([-]。] \ w) * \。%=]*)?$身份验证interneturl \ d {15} | \ d {18} $身份验证id号(15位或18位)((2 [0-4] \ d | 25 [0-5] | [01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$验证IP地址(\w)\1匹配两个重叠字符,例如‘aabbc 11 SD’,返回结果是aa bb 11三组匹配

(?标签[\ s])[[]*。*/\ ktag匹配成对的HTML标记(?)不会出现,否定声明下面的示例演示了如何获取一个A标记对的所有内容,即使它包含其他HTML标记。string NewsContent=@ ' URL : a href=' 1 . html ' ' img src=' http : ' 1 . gif ' ' test span style=' color : red;'regex/span/a . ';新Regex(@'\s*a[^]*([^]|(?/a))*\s*/a\s* ',RegexOptions。多线);用途:Match关键字=' ',例如,get关键字,value;获取abc值并测试等于

表达式:字符串(?x[^=]*?) *=*(?y[^;]*?);

代码:

私有空解析关键字(字符串输入){系统。匹配集合mc=系统。匹配(输入,@ '字符串(?x[^=]*?) *=*(?y[^;]*?);');if (mc!=空mc。计数0) { foreach(系统。Text .正则表达式. Match m in mc) { string关键字=m . group[' x ']。价值;字符串值=m个组['y']。价值;}}}截图:

2.匹配并替换

输入:public %=class name % extension : iext

目的:在%=%中间匹配类名并替换它

表达式:%=。*%

代码:

私有字符串Replace(字符串输入){返回Regex。替换(输入,@'%=。*% ',新的MatchEvaluator(RefineCodeTag),RegexOptions。单线);} string refinecodeag(Match m){ string x=m . ToString();x=Regex。替换(x,' %=',' ');x=Regex。替换(x,' % ',' ');返回x.Trim()',';}截图:

正则表达式选项正则表达式选项3360

显式捕获

n仅捕获定义了名称或编号的组

IgnoreCase i不区分大小写IgnorePatternWhitespace x消除了模式中的非转义空白,并启用了用#标记的注释。MultiLine m multiline模式,其原理是修改和$

单线模式,对应于多线

正则表达式替换的其他功能:

$number用替换表达式替换匹配的数字组。该代码返回“01 012 03 05”

也就是说,第一组的每个匹配结果都被表达式“0$1”替换,“0$1”中的“$1”被第一组的匹配结果替换

public static void Main() {字符串s=' 1 12 3 5s=Regex。替换,@'(\d)(?#这是一个注释)',' 0 $1 ',regeoptions。编译| regeoptions。ignore case);控制台。写线;控制台。ReadLine();} ${name}

用表达式替换名为“name”的匹配组,

上面示例中的Regex表达式被更改为@ '(?名称\d(?#这是一个评论。)后的替换改为“0${name}”,结果相同

$$

如上面的例子,转义字符$,将表达式改为@ '(?名称\d(?#这是一个注释)和“$$${name}”,那么结果就是“$1 $12 $3 $5”

$替换整个匹配$ `替换匹配前的字符$ '替换匹配后的字符$替换最后一个匹配组$ _替换整个字符串3。匹配网址中的文件名。

输入:///www.jb51.net/page1.htm

目的:从网址中提取文件名

表达式:s=s. replace (/(。* \/) {0,} ([\.]).*/ig,' $ 2 ');

代码:

string s='//www . JB 51 . net/page 1 . htm ';s=s.replace(/(。*\/){0,}([^\.] ).*/ig,' $ 2 ');

截图:

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:实用正则表达式匹配替换百科是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。