从BRE 与 ERE的文法看两者的异同
来源:互联网 发布:网络作家网站 编辑:程序博客网 时间:2024/05/01 12:24
关于BRE 和ERE,下面是Open Group公布的文法定义: BRE and Bracket Expression Grammar %token ORD_CHAR QUOTED_CHAR DUP_COUNT %token BACKREF L_ANCHOR R_ANCHOR %token Back_open_paren Back_close_paren /* '/(' '/)' */ %token Back_open_brace Back_close_brace /* '/{' '/}' */ /* The following tokens are for the Bracket Expression grammar common to both REs and EREs. */ %token COLL_ELEM META_CHAR %token Open_equal Equal_close Open_dot Dot_close Open_colon Colon_close /* '[=' '=]' '[.' '.]' '[:' ':]' */ %token class_name /* class_name is a keyword to the LC_CTYPE locale category */ /* (representing a character class) in the current locale */ /* and is only recognised between [: and :] */ %start basic_reg_exp %% /* -------------------------------------------- Basic Regular Expression -------------------------------------------- */ basic_reg_exp : RE_expression | L_ANCHOR | R_ANCHOR | L_ANCHOR R_ANCHOR | L_ANCHOR RE_expression | RE_expression R_ANCHOR | L_ANCHOR RE_expression R_ANCHOR ; RE_expression : simple_RE | RE_expression simple_RE ; simple_RE : nondupl_RE | nondupl_RE RE_dupl_symbol ; nondupl_RE : one_character_RE | Back_open_paren RE_expression Back_close_paren | Back_open_paren Back_close_paren | BACKREF ; one_character_RE : ORD_CHAR | QUOTED_CHAR | '.' | bracket_expression ; RE_dupl_symbol : '*' | Back_open_brace DUP_COUNT Back_close_brace | Back_open_brace DUP_COUNT ',' Back_close_brace | Back_open_brace DUP_COUNT ',' DUP_COUNT Back_close_brace ; /* -------------------------------------------- Bracket Expression ------------------------------------------- */ bracket_expression : '[' matching_list ']' | '[' nonmatching_list ']' ; matching_list : bracket_list ; nonmatching_list : '^' bracket_list ; bracket_list : follow_list | follow_list '-' ; follow_list : expression_term | follow_list expression_term ; expression_term : single_expression | range_expression ; single_expression : end_range | character_class | equivalence_class ; range_expression : start_range end_range | start_range '-' ; start_range : end_range '-' ; end_range : COLL_ELEM | collating_symbol ; collating_symbol : Open_dot COLL_ELEM Dot_close | Open_dot META_CHAR Dot_close ; equivalence_class : Open_equal COLL_ELEM Equal_close ; character_class : Open_colon class_name Colon_close ; /* -------------------------------------------- Extended Regular Expression -------------------------------------------- */ extended_reg_exp : ERE_branch | extended_reg_exp '|' ERE_branch ; ERE_branch : ERE_expression | ERE_branch ERE_expression ; ERE_expression : one_character_ERE | '^' | '$' | '(' extended_reg_exp ')' | ERE_expression ERE_dupl_symbol ; one_character_ERE : ORD_CHAR | QUOTED_CHAR | '.' | bracket_expression ; ERE_dupl_symbol : '*' | '+' | '?' | '{' DUP_COUNT '}' | '{' DUP_COUNT ',' '}' | '{' DUP_COUNT ',' DUP_COUNT '}' ; 可以看出BRE和ERE的几点区别: 1.特殊字符不同(也即意味着除去特殊字符剩下的普通字符也不完全相同) BRE: .[/ 句点, 左括号和反斜线除了用在括号表达式中, 应当是特殊的. 表达式包含 '[', 而'['前面不带反斜线且不是括号表达式一部分时, 产生未定义的结果. * 星号应当是特殊的, 除非当用于: A) 括号表达式 B) 整个BRE的第一个字符(如果有开头的'^', 在其后) C) 作为子表达式的第一个字符(如果有开头的'^', 在其后) ^ 抑扬符号当如下使用时应当是特殊的: A)定位符(anchor) B)括号表达式的第一个字符 $ 美元符号, 当用作定位符时是特殊的. ERE: .[/( 句点, 左括号, 反斜线, 和左圆括号当不用于括号表达式中时应当是特殊的. 在括号表达式外, 紧跟右圆括号的左圆括号产生未定义的结果. ) 无论在括号表达式内外, 当与前面的左圆括号匹配时, 右圆括号应当是特殊的. *+?{ 星号, 加号, 问号, 和左大括号当不用于括号表达式中时应当是特殊的. 下面的任何用法产生未定义结果: A) 如果这些字符出现在ERE的第一个, 或者紧跟竖线, 抑扬符, 或左 圆括号 B) 如果左大括号不是有效的间隔表达式的一部分 | 竖线符号应当是特殊的, 除非用于括号表达式中. 竖线符号出现在ERE的第一 个或最后, 或者紧跟竖线或左圆括号, 或在右圆括号前面, 将产生未定义的 结果. ^ 当用于下面情况时, 抑扬符应当是特殊的: A) 定位符 B) 括号表达式的第一个字符 $ 当用作定位符时, 美元符应当是特殊的. 2.BRE可以使用向后引用 3.字符重复匹配次数语法不同(BRE:/{m,n/} ;ERE:{m,n} ) 4.ERE可以使用组合()和交换| 但两者的括号表达式[]同样的 |
- 从BRE 与 ERE的文法看两者的异同
- BRE与ERE的异同
- BRE与ERE的区别
- BRE与ERE的差异
- BRE与ERE的差异
- 正则表达式 BRE 与 ERE的区别
- globbing、ERE、BRE的比较
- POSIX 正则表达式 BRE 与 ERE的区别
- POSIX BRE和ERE的metacharacters(元字符)
- POSIX BRE和ERE的metacharacters(元字符)
- 正则表达式之BRE与ERE字符集
- grep BRE ERE
- Data Guard 与Straem流复制的介绍,两者异同
- 从上次写的10行代码看java与c++的异同
- push推送机制与IM即时通信的长链接机制两者的异同
- 从文法的定义讲起
- 现在看的《c#技术内幕》与过去看的《Think In Java》两者的比较
- [编译原理]文法的定义与文法产生的分类
- 企业管理不可忽视“工作日志”
- 注重实效的程序员应具备的特征
- Linux/Unix实现自动ftp的shell脚本
- web组件设计,利用接口(IPostBackDataHandler)产生数据回传的问题
- 工作和爱情
- 从BRE 与 ERE的文法看两者的异同
- Oracle中获取表空间DDL语句
- UNIX下逻辑卷相关概念
- 我简直太不象话了!!!
- 如何用APT维护Red Hat Enterprise Linux (RHEL)
- 搬家了搬家了
- 今天我感觉自己不能做一点。就是:再坚持一会,再坚持一会我就不是现在这样子了。
- 俄罗斯方块
- Delphi小技巧