正则表达式简介(二) -- Why Regular Expression
时间:2009-04-29 来源:Godbach
1.Why Regular Expression
Regular Expression 是一种字符串表达的方式. 使用者可使用一个简短的 Regular Expression 来表示 〝具有某特征〞 或者 〝复杂难以描述〞的所有字符串. 而日常数据处理中, 最常进行的工作是『从档案中找出具有某特征的字符串, 再加以处理(打印,置换, 计算...)』. 此时, Regular Expression 便可派上用场. 使用一个简短的 Regular Expression 便可完全指定需要加以处理的资料 , 避免反复判断找寻的困扰. 譬如 :
若使用 MS-DOS 中文字编辑器 edit 的找寻功能, 可来 找出档案中所有的 ``prg1.c''; 但 edit 却无法一次同 时找寻字符串``prg1.c''、``prg2.c'' ... 或 ``prg8.c''; 必需 反复执行八次找寻的动作.
可是在 UNIX 中的 vi , 使用一个 Regular Expression `` prg[0-8]\.c'' 便可同时表示上述八个字符串, 如此一次就可找出指定的所有字符串.
可见 Regular Expression 确实十分便利. 然而, MS-DOS 下许多工具的设计并不支持解读 Regular Expression. 但 UNIX 环境下除了 vi 外, 还有许多工具都接受 Regular Expression, 如 : grep、sed、awk、csplit... . 使用这些工具时, 便可应用 Regular Expression 来指定欲找寻的字符串; 并可配合这些工具的其它功能将找寻到的数据进一步地加以处理.
Regular Expression 的特色是简短且表达力强. 它所表达的可以是某一特定的字符串, 也可以是具有某一共同特征的"所有"字符串(如上例). Regular Expression 中定义了一组特殊字符, 它们代表着某些特别的意义; 使用者可藉这些特殊字符来表示字符串的下列特征 :
描述组成字符串的元素(components) : 例 如 : Regular Expression ``[Tt]he'' 代表字符串 ``The'' 或 ``the''.
限制字符串出现的位置 : 例 如 : Regular Expression ``^The'' 代表『出现于行首』的字符串 ``The''.
由于 Regular Expression 具有极佳的字符串表示能力. 往后, 读者若能多利用 UNIX 上接受 Regular Expression 的工具, 且灵活应用 Regular Expression; 则可避免撰写程序进行复杂字符串判断(parsing) 的麻烦. 如此, 才能真正发挥各工具的的功能, 减轻数据处理时的负担, 并增加数据处理的效率.
----------------------------------------------------------------------------------
Note 1
UNIX中定义了数种字符串表达方式, Regular Expression 及 Extended Regular Expression 是常见的二种. 另一种是使用于Shell命令列, 将参数展开}(expand)成文件名称的"Pattern Matching Notation", 这种表示法与 Regular Expressions 的语法差异较大, 甚至有数项用法相左, 故位未列入本文讨论以免读者混淆.
Regular Expression 是一种字符串表达的方式. 使用者可使用一个简短的 Regular Expression 来表示 〝具有某特征〞 或者 〝复杂难以描述〞的所有字符串. 而日常数据处理中, 最常进行的工作是『从档案中找出具有某特征的字符串, 再加以处理(打印,置换, 计算...)』. 此时, Regular Expression 便可派上用场. 使用一个简短的 Regular Expression 便可完全指定需要加以处理的资料 , 避免反复判断找寻的困扰. 譬如 :
若使用 MS-DOS 中文字编辑器 edit 的找寻功能, 可来 找出档案中所有的 ``prg1.c''; 但 edit 却无法一次同 时找寻字符串``prg1.c''、``prg2.c'' ... 或 ``prg8.c''; 必需 反复执行八次找寻的动作.
可是在 UNIX 中的 vi , 使用一个 Regular Expression `` prg[0-8]\.c'' 便可同时表示上述八个字符串, 如此一次就可找出指定的所有字符串.
可见 Regular Expression 确实十分便利. 然而, MS-DOS 下许多工具的设计并不支持解读 Regular Expression. 但 UNIX 环境下除了 vi 外, 还有许多工具都接受 Regular Expression, 如 : grep、sed、awk、csplit... . 使用这些工具时, 便可应用 Regular Expression 来指定欲找寻的字符串; 并可配合这些工具的其它功能将找寻到的数据进一步地加以处理.
Regular Expression 的特色是简短且表达力强. 它所表达的可以是某一特定的字符串, 也可以是具有某一共同特征的"所有"字符串(如上例). Regular Expression 中定义了一组特殊字符, 它们代表着某些特别的意义; 使用者可藉这些特殊字符来表示字符串的下列特征 :
描述组成字符串的元素(components) : 例 如 : Regular Expression ``[Tt]he'' 代表字符串 ``The'' 或 ``the''.
限制字符串出现的位置 : 例 如 : Regular Expression ``^The'' 代表『出现于行首』的字符串 ``The''.
由于 Regular Expression 具有极佳的字符串表示能力. 往后, 读者若能多利用 UNIX 上接受 Regular Expression 的工具, 且灵活应用 Regular Expression; 则可避免撰写程序进行复杂字符串判断(parsing) 的麻烦. 如此, 才能真正发挥各工具的的功能, 减轻数据处理时的负担, 并增加数据处理的效率.
----------------------------------------------------------------------------------
Note 1
UNIX中定义了数种字符串表达方式, Regular Expression 及 Extended Regular Expression 是常见的二种. 另一种是使用于Shell命令列, 将参数展开}(expand)成文件名称的"Pattern Matching Notation", 这种表示法与 Regular Expressions 的语法差异较大, 甚至有数项用法相左, 故位未列入本文讨论以免读者混淆.
相关阅读 更多 +