windows下统配符查
数码⾬
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切⽂本。虽然这种技术对于对静态⽂本执⾏简单搜索和替换任务可能已经⾜够了,但它缺乏灵活性,若采⽤这种⽅法搜索动态⽂本,即使不是不可能,⾄少也会变得很困难。
通过使⽤正则表达式,可以:
测试字符串内的模式。
例如,可以测试输⼊字符串,以查看字符串内是否出现电话号码模式或信⽤卡号码模式。这称为数据验证。
替换⽂本。
可以使⽤正则表达式来识别⽂档中的特定⽂本,完全删除该⽂本或者⽤其他⽂本替换它。
基于模式匹配从字符串中提取⼦字符串。
可以查⽂档内或输⼊域内特定的⽂本。
例如,您可能需要搜索整个⽹站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使⽤正则表达式来确定在每个⽂件中是否出现该材料或该 HTML 格式标记。此过程将受影响的⽂件列表缩⼩到包含需要删除或更改的材料的那些⽂件。然后可以使⽤正则表达式来删除过时的材料。最后,可以使⽤正则表达式来搜索和替换标记。
四、发展历史
正则表达式的'祖先'可以⼀直上溯⾄对⼈类神经系统如何⼯作的早期研究。Warren McCulloch 和Walter Pitts 这两位神经⽣理学家研究出⼀种数学⽅式来描述这些神经⽹络。
1956 年, ⼀位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期⼯作的基础上,发表了⼀篇标题为'神经⽹事件的表⽰法'的论⽂,引⼊了正则表达式的概念。正则表达式就是⽤来描述他称为'正则集的代数'的表达式,因此采⽤'正则表达式'这个术语。
随后,发现可以将这⼀⼯作应⽤于使⽤ Ken Thompson 的计算搜索算法的⼀些早期研究,Ken Thompson 是 Unix 的主要发明⼈。正则表达式的第⼀个实⽤应⽤程序就是 Unix 中的 qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直⾄现在正则表达式都是基于⽂本的编辑器和搜索⼯具中的⼀个重要部分。
五、应⽤领域
⽬前,正则表达式已经在很多软件中得到⼴泛的应⽤,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应⽤软件中,都可以看到正则表达式的影⼦。
命令或环境.[
]
^$\(
\)
\{ \}?+|( )
vi√√√√√Visual
C++
√√√√√
awk√√√√awk是⽀持该语法的,只是要在命令⾏加⼊ --posix or --re-
interval参数即可,可见 man awk中的interval expression
√√√√
sed√√√√√√
正则匹配方法delphi√√√√√√√√√python√√√√√√√√√√
java√√√√√√√√√
√
javascript√√√√√√√√√php√√√√√
perl√√√√√√√√√C#√√√√√√√√
六、基本语法规则
正则表达式(regular expression)描述了⼀种字符串匹配的模式(pattern),可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串替换或者从某个串中取出符合某个条件的⼦串等。
例如:
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前⾯的字符必须⾄少出现⼀次(1次或多次)。
runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表字符可以不出现,也可以出现⼀次或者多次(0次、或1次、或多次)。
colou?r 可以匹配 color 或者 colour,? 问号代表前⾯的字符最多只可以出现⼀次(0次、或1次)。
构造正则表达式的⽅法和创建数学表达式的⽅法⼀样。也就是⽤多种元字符与运算符可以将⼩的表达式结合在⼀起来创
建更⼤的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为'元字符')组成的⽂字模式。模式描述在搜索⽂本时要匹配的⼀个或多个字符串。正则表达式作为⼀个模板,将某个字符模式与所搜索的字符串进⾏匹配。
正则表达式基本语法符号
七、案例⽰范
简单表达式
正则表达式的最简单形式是在搜索字符串中匹配其本⾝的单个普通字符。例如,单字符模式,如 A,不论出现在搜索字符串中的何处,它总是匹配字母 A。下⾯是⼀些单字符正则表达式模式的⽰例:
/a//7//M/
可以将许多单字符组合起来以形成⼤的表达式。例如,以下正则表达式组合了单字符表达式:a、7 和 M。
/a7M/
请注意,没有串联运算符。只须在⼀个字符后⾯键⼊另⼀个字符。
字符匹配
句点 (.) 匹配字符串中的各种打印或⾮打印字符,只有⼀个字符例外。这个例外就是换⾏符(\n)。下⾯的正则表达式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:
/a.c/
若要匹配包含⽂件名的字符串,⽽句点 (.) 是输⼊字符串的组成部分,请在正则表达式中的句点前⾯加反斜杠 (\) 字符。举例来说明,下⾯的正则表达式匹配 :
/filename\.ext/
这些表达式只让您匹配'任何'单个字符。可能需要匹配列表中的特定字符组。例如,可能需要查⽤数字表⽰的章节标题(Chapter 1、Chapter 2 等等)。
中括号表达式
若要创建匹配字符组的⼀个列表,请在⽅括号([ 和 ])内放置⼀个或更多单个字符。当字符括在中括号内时,该列表称
为'中括号表达式'。与在任何别的位置⼀样,普通字符在中括号内表⽰其本⾝,即,它在输⼊⽂本中匹配⼀次其本⾝。⼤多数特殊字符在中括号表达式内出现时失去它们的意义。不过也有⼀些例外,如:
如果 ] 字符不是第⼀项,它结束⼀个列表。若要匹配列表中的 ] 字符,请将它放在第⼀位,紧跟在开始 [ 后⾯。
\ 字符继续作为转义符。若要匹配 \ 字符,请使⽤ \\。
括在中括号表达式中的字符只匹配处于正则表达式中该位置的单个字符。以下正则表达式匹配Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5:
/Chapter [12345]/
请注意,单词 Chapter 和后⾯的空格的位置相对于中括号内的字符是固定的。中括号表达式指定的只是匹配紧跟在单词 Chapter 和空格后⾯的单个字符位置的字符集。这是第九个字符位置。
若要使⽤范围代替字符本⾝来表⽰匹配字符组,请使⽤连字符 (-) 将范围中的开始字符和结束字符分开。单个字符的字符值确定范围内的相对顺序。下⾯的正则表达式包含范围表达式,该范围表达式等效于上⾯显⽰的中括号中的列表。
/Chapter [1-5]/
当以这种⽅式指定范围时,开始值和结束值两者都包括在范围内。注意,还有⼀点很重要,按Unicode 排序顺序,开始值必须在结束值的前⾯。
若要在中括号表达式中包括连字符,请采⽤下列⽅法之⼀:
⽤反斜杠将它转义:
[\-]
将连字符放在中括号列表的开始或结尾。下⾯的表达式匹配所有⼩写字母和连字符:
[-a-z][a-z-]
创建⼀个范围,在该范围中,开始字符值⼩于连字符,⽽结束字符值等于或⼤于连字符。下⾯的两个正则表达式都满⾜这⼀要求:
[!--][!-~]
若要查不在列表或范围内的所有字符,请将插⼊符号 (^) 放在列表的开头。如果插⼊字符出现在列表中的其他任何位置,则它匹配其本⾝。下⾯的正则表达式匹配1、2、3、4 或 5 之外的任何数字和字符:
/
Chapter [^12345]/
在上⾯的⽰例中,表达式在第九个位置匹配 1、2、3、4 或 5 之外的任何数字和字符。这样,例如,Chapter 7 就是⼀个匹配项,Chapter 9 也是⼀个匹配项。
上⾯的表达式可以使⽤连字符 (-) 来表⽰:
/Chapter [^1-5]/
中括号表达式的典型⽤途是指定任何⼤写或⼩写字母或任何数字的匹配。下⾯的表达式指定这样的匹配:
/[A-Za-z0-9]/
替换和分组
替换使⽤ | 字符来允许在两个或多个替换选项之间进⾏选择。例如,可以扩展章节标题正则表达式,以返回⽐章标题范围更⼴的匹配项。但是,这并不象您可能认为的那样简单。替换匹配 | 字符任⼀侧最⼤的表达式。
您可能认为,下⾯的表达式匹配出现在⾏⾸和⾏尾、后⾯跟⼀个或两个数字的 Chapter 或Section:
/^Chapter|Section [1-9][0-9]{0,1}$/
很遗憾,上⾯的正则表达式要么匹配⾏⾸的单词 Chapter,要么匹配⾏尾的单词 Section 及跟在其后的任何数字。如果输⼊字符串是 Chapter 22,那么上⾯的表达式只匹配单词 Chapter。如果输⼊字符串是 Section 22,那么该表达式匹配 Section 22。
若要使正则表达式更易于控制,可以使⽤括号来限制替换的范围,即,确保它只应⽤于两个单词 Chapter 和 Section。但是,括号也⽤于创建⼦表达式,并可能捕获它们以供以后使⽤,这⼀点在有关反向引⽤的那⼀节讲述。通过在上⾯的正则表达式的适当位置添加括号,就可以使该正则表达式匹配 Chapter 1 或 Section 3。
下⾯的正则表达式使⽤括号来组合 Chapter 和 Section,以便表达式正确地起作⽤:
/^(Chapter|Section) [1-9][0-9]{0,1}$/
尽管这些表达式正常⼯作,但 Chapter|Section 周围的括号还将捕获两个匹配字中的任⼀个供以
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论