|的意思:將兩個匹配條件進行邏輯“或”(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。
*的意思:匹配0或多個正好在它之前的那個字符。例如正則表達式.*意味著能夠匹配任意數量的任何字符。
所以妳給的那個例子00(0|1)*可以用來匹配00或者001或者000或者0000或者0011,但是不能匹配011等等。
具體定義還是要多參考壹下下面的文章:
/~yhf/tao_regexps_zh.html
正則表達式,Regular Expression(也稱為“regex”或“regexp”),是壹種用來描述文本模式的特殊語法。壹個正則表達式由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符,如/、*、?等)組成。簡單地說,壹個正則表達式就是妳需要匹配的字符串。例如,正則表達式“A*B”匹配字符串“ACCCB”但是不匹配“ACCCC”。
什麽是巴科斯範式?
巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首先引入的用來描述計算機語言語法的符號集。
現在,幾乎每壹位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。
巴科斯範式的內容
在雙引號中的字("word")代表著這些字符本身。而double_quote用來代表雙引號。
在雙引號外的字(有可能有下劃線)代表著語法部分。
尖括號( < > )內包含的為必選項。
方括號( [ ] )內包含的為可選項。
大括號( { } )內包含的為可重復0至無數次的項。
豎線( | )表示在其左右兩邊任選壹項,相當於"OR"的意思。
::= 是“被定義為”的意思。
巴科斯範式示例
這是用BNF來定義的Java語言中的For語句的實例:
FOR_STATEMENT ::=
"for" "(" ( variable_declaration |
( expression ";" ) | ";" )
[ expression ] ";"
[ expression ] ";"
")" statement
這是Oracle packages的BNF定義:
package_body ::= "package" package_name "is"
package_obj_body { package_obj_body }
[ "begin" seq_of_statements ]
"end" [ package_name ] ";"
package_obj_body ::= variable_declaration
| subtype_declaration
| cursor_declaration
| cursor_body
| exception_declaration
| record_declaration
| plsql_table_declaration
| procedure_body
| function_body
procedure_body ::= "procedure" procedure_name
[ "(" argument { "," argument } ")" ]
"return" return_type
"is"
[ "declare" declare_spec ";" { declare_spec ";" } ]
"begin"
seq_of_statements
[ "exception" exception_handler { exception_handler } ]
"end" [ procedure_name ] ";"
statement ::= comment
| assignment_statement
| exit_statement
| goto_statement
| if_statement
| loop_statement
| null_statement
| raise_statement
| return_statement
| sql_statement
| plsql_block
這是用BNF來定義的BNF本身的例子:
syntax ::= { rule }
rule ::= identifier "::=" expression
expression ::= term { "|" term }
term ::= factor { factor }
factor ::= identifier |
quoted_symbol |
"(" expression ")" |
"[" expression "]" |
"{" expression "}"
identifier ::= letter { letter | digit }
quoted_symbol ::= """ { any_character } """
擴展的巴科斯範式 Augmented BNF
RFC2234 定義了擴展的巴科斯範式(ABNF)。近年來在Internet的定義中ABNF被廣泛使用。ABNF做了更多的改進,比如說,在ABNF中,尖括號不再需要。