`
ihyperwin
  • 浏览: 434620 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js、java正则表达式及在linux命令中的应用

阅读更多
正则表达式:
js、java、.net等编程语言中用到的正则表达式语法是一样的,只是其判断方法不一样。

以前都是copy网上的,简单倒也麻烦,不能确定网上的对错优劣,可以抄,但抄的要有思想。
这里只讲语法,以js为例:

正则表达式的形式一般如下:

  /pattern/  其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

  较为常用的元字符包括: “+”, “*”,以及 “?”。

  “+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

  “*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

  “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。


  下面,就让我们来看一下正则表达式元字符的具体应用。

  /fo+/  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

  /eg*/  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

  /Wil?/  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

  有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

  {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?'。请注意在逗号和两个数之间不能有空格。

  除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。

  在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

  \s:用于匹配单个空格符,包括tab键和换行符;

  \S:用于匹配除单个空格符之外的所有字符;

  \d:用于匹配从0到9的数字;

  \w:用于匹配字母,数字或下划线字符;

  \W:用于匹配所有与\w不匹配的字符;

  . :用于匹配除换行符之外的所有字符。

  (说明:我们可以把\s和\S以及\w和\W看作互为逆运算)

  下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。

  /\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。

  /\d000/ 如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。

  除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。

  “^”定位符规定匹配模式必须出现在目标字符串的开头

  “$”定位符规定匹配模式必须出现在目标对象的结尾

  “\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一

  “\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,

  即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

  同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说: /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。

  为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:

  /[A-Z]/  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。

  /[a-z]/  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。

  /[0-9]/  上述正则表达式将会与从0到9范围内任何一个数字相匹配。

  /([a-z][A-Z][0-9])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。

  这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

  如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。

  正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/ 上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。

  最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/  上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

  在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:

  1.\ 转义符

  2.(), (?:), (?=), [] 圆括号和方括号

  3.*, +, ?, {n}, {n,}, {n,m} 限定符

  4.^, $, \anymetacharacter 位置和顺序

  5.|“或”操作

-------------------------------------------------------------------------------------------------------------------------------------

正则表达式在linux中的应用

正则表达式:
正则表达式就是处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊符号的辅助,可以让用户轻松搜索/替换某特定字符串。

利用[]来搜索集合字符

grep -n 't[ae]st' regular_express.txt

[]中不论有几个字符,都只代表“一个”字符,所以,上面的例子说明,我们需要的只是“tast”或“test”两个字符串。

grep -n '[^g]oo' regular_express.txt
#搜索oo字符串,且之前不能有g, [^]集合的反向选择。

grep -n '[^a-z]oo' regular_express.txt #oo前面不想有小写字母

grep -n   '[a-zA-Z0-9]' regular_express.txt

行首与行尾字符^$

grep -n '^the' test.txt
grep -n '^[a-z]' test.txt
grep -n '^[^a-zA-Z]' test.txt #开头不为英文字母的行,^符号,在[]中代表"反向选择",在[]之外则代表定位在行首。

#行尾结束为小数点(.)的一行
grep -n '\.$' regular_express.txt #转义小数点,解除其特殊意义。

grep -n '^$' test.text  # 找出空白行

grep -v '^$' /etc/syslog.conf | grep -v '^#'  #去除空白行,去除注释行

任意一个字符(.)与重复字符(*)
正则表达式当中的(.)代表“绝对有一个任意字符”意思。
grep -n "g..d" test.txt

(*) 在正则表达式中表示“重复0个或多个前面的RE字符”,因此,(o*)表示“拥有空字符或一个o以上的字符”。
特别注意,因为允许空字符串(就是不管是否有字符都可以的意思),因此,grep -n 'o*' test.txt将会把所有的数据都显示在屏幕上。

如果是(oo*),第一个o肯定存在,第二个o是可有可无的,所以凡是含有一个及一个以上的o都可以列出来。
同理,当需要至少两个o以上的字符串时,就需要ooo*

#字符串开头和结尾都是g,但两个g之间仅能存在至少一个o,即gog、goog等。
grep -n 'g.*g' test.txt
因为*可以是0或多个重复前面的字符,而.是任意字符,所以“.*代表零个或多个任意字符“

# 注意:*在通配符和正则表达式中的意思是不一样的。

限定连续重复字符范围{}
如果想限制一个范围内的重复字符数,要使用限定范围字符{}。
因为{}与}的符号在shell有特殊的意义,因此要使用转义符\让它失去特殊意义。

#要找出两个o的字符串
grep -n 'o\{2\}' test.txt

grep -n 'go\{2,5\}g' test.txt

grep -n 'go\{2,\}g' text.txt  #找出两个o以上的字符

重要特殊字符(characters)
^word  待搜索的字符串(word)在行首
word$  待搜索的字符串(word)在行尾
.    代表”任意一个“字符,一定是一个任意字符,空格符也是字符。
\   转义符,将特殊符号的特殊意义去除
* 重复零个或多个的前一个重复字符
\{n,m\} 连续n到m个的”前一个重复字符“  ,若为\{n\}则是连续重复n个前一个字符,若是\{n,\}则是连续重复n个以上前一个字符
[]  字符集合的重复特殊字符的符号, 在[]中仅代表一个待搜索的字符, 需特别注意的是,在字符集合[]中的减号是有特殊意义的,它
代表两个字符之间的所有连续字符。但连续与否与ascii编码有关,因此编码需要设置正确(在bash中,需要确定LANG与LANGUAGE的变量是否正确)

注意:通配符中的*和正则表达式中的*并不相同,另外,通配符的反向选择为[!range],正则表达式则是[^range]


扩展正则表达式
grep -v '^$' text.txt | grep -v '^#'   #使用管道命令来搜索两次
egrep -v '^$|^#' test.txt       #使用支持扩展型正则表达式的egrep与特殊字符|来分隔两组字符串,会方便很多。

grep支持基础正则表达式,而egrep支持扩展正则表达式。egrep是grep -E的命令别名

扩展正则表达式的特殊符号:
+  重复”一个或一个以上“的字符。
? ”0个或一个字符“
|  用或(or)的方式找出数个字符串
()  找出”用户组“字符串。


egrep -n 'g(la|oo)d' text.txt
echo 'AxyzxyzxyzC'  | egrep 'A(xyz)+C'    #找开头是A,结尾是C,中间有一个以上的”xyz“字符串。

注意: !在正则表达式中并不是特殊字符。


其实,语法都是一样的,只是用法略有不同,正则表达式有其固有的语法规则。
分享到:
评论

相关推荐

    JAVA 正则表达式

    脚本语言如Python、Tcl、JavaScript和Perl也都支持正则表达式,其中Perl在文本处理方面的应用尤为出色。 在Java语言中,正则表达式的支持起步较晚。早期Java开发者通常依赖第三方类库来实现正则表达式功能,这些...

    正则表达式详细介绍

    正则表达式是一种强大的文本匹配工具,它能够用来检查、分割、替换字符串,并在很多编程语言和工具中得以应用。正则表达式通常使用简短的字符串来定义复杂的搜索模式,这些模式可以包含普通字符、特殊字符和元字符。...

    REG正则表达式教程

    掌握正则表达式,可以极大地提升你在编程和数据处理上的效率,无论是UNIX/Linux系统还是Windows环境,甚至在各种编程语言中,如Python、Java、JavaScript等,正则表达式都是不可或缺的一部分。 正则表达式的核心...

    常用正则表达式集合

    在这个“常用正则表达式集合”中,你可能会找到许多实用的模板,帮助你在处理字符串时提高效率。下面我们将深入探讨正则表达式的基本概念、语法以及一些常见用法。 1. **基本概念** - **模式匹配**:正则表达式是...

    正则表达式部分代码

    在上述代码片段中,正则表达式被用来完成多种任务,包括字符串清洗、格式验证等。 #### 字符串清洗 1. **去除特殊字符**:`param.replaceAll("([\'\\s]{1})","");` 这行代码的作用是去除字符串中的单引号(')以及...

    一款可调式生成正则表达式的软件!

    4. **代码生成**:自动生成适用于多种编程语言(如Java、Python、JavaScript等)的正则表达式代码片段。 5. **文档支持**:内置正则表达式语法参考,方便用户查询和学习。 6. **模板库**:预设常见正则表达式模式,...

    正则表达式必知必会.zip

    1. 在各种编程语言中:如JavaScript、Python、Java等,都有内置的正则表达式支持,通过特定函数或方法实现匹配、替换和分割等操作。 2. 命令行工具:如grep、sed、awk等,在Linux/Unix系统中常用于文本处理。 3. ...

    正则表达式参考文档揭开正则表达式的神秘面纱

    - 在编程语言中:如JavaScript、Python、Java等,它们内置了正则表达式引擎。 - 文本编辑器:如Vim、Emacs等,提供了强大的正则表达式搜索和替换功能。 - 命令行工具:如Unix/Linux的grep、sed、awk等,利用正则...

    PHP正则表达式基本语法和使用方法

    正则表达式(regular expression)是一种表示方式,最早在LINUX被当做一种搜索算法应用在编辑器中,后来被广泛应用,不仅PHP脚本支持正则表达式,Perl、C#、Java以及JavaScript和MySQL也对正则表达式支持。在PHP中...

    正则表达式测试工具 RegexAnalyzer

    它支持多种平台和编程语言,这意味着无论你是在Windows、Linux还是Mac OS上工作,无论你使用的是C#、Java、Python还是JavaScript,都可以借助这个工具进行正则表达式的测试。尽管它是基于.NET构建的,但请注意,它尽...

    RegexMagic正则表达式检查工具

    5. **代码生成**:RegexMagic可能具备生成代码的功能,允许用户将测试成功的正则表达式直接导出到各种编程语言(如Java、Python、JavaScript、C#等),方便在实际项目中使用。 6. **库和预定义模式**:工具可能包含...

    正则表达式详细教程加测试工具

    10. **实际应用**:在编程语言如Python、JavaScript、Java等中,了解如何使用内置函数或模块执行正则表达式操作,如查找、替换和分割字符串。 通过这些资源,你可以逐步构建起对正则表达式的全面理解,并利用Regex...

    RegexBuddy3正则表达式编写工具

    它支持多种正则表达式引擎,如Perl、Java、.NET等,确保你在不同平台下都能得到一致的匹配结果。 2. **测试和调试**:RegexBuddy3允许你实时测试正则表达式,查看匹配的文本部分,并通过高亮显示和步进调试功能来...

    正则表达式系统教程

    - **命令行工具**:如 `grep`, `sed`, `awk` 等在Linux/Unix环境中广泛使用正则表达式。 - **编程语言**:多数编程语言(如JavaScript, Python, Java, C#等)内置了正则表达式支持。 - **文本编辑器**:如Notepad...

    正则表达式经典实例 (美)高瓦特斯,(美)利维森

    这本书深入浅出地介绍了正则表达式的概念、语法以及在各种编程环境中的应用,为读者提供了一个全面理解和掌握正则表达式的平台。 正则表达式,简称regex,是一种强大的文本处理工具,广泛应用于数据验证、搜索、...

Global site tag (gtag.js) - Google Analytics