我正在使用用於Javascript的Jison解析器生成器,並且遇到了我的語言規範問題。如何確保正則表達式不匹配空字符串?
我正在寫的程序將是一個可以處理英尺,英寸和十六分之一的計算器。 爲了做到這一點,我有以下規格:
%%
([0-9]+\s*"'")?\s*([0-9]+\s*"\"")?\s*([0-9]+\s*"s")? {return 'FIS';}
[0-9]+("."[0-9]+)?\b {return 'NUMBER';}
\s+ {/* skip whitespace */}
"*" {return '*';}
"/" {return '/';}
"-" {return '-';}
"+" {return '+';}
"(" {return '(';}
")" {return ')';}
<<EOF>> {return 'EOF';}
這些線路來自一個簡單的計算器規範。我只是添加了第一行。
正確匹配英尺,英寸,十六分之一,例如6'4"
(六英尺4英寸)或4"5s
(4英寸,5十六分之五)與數字和指標之間的任何類型的空格。
問題是,正則表達式也匹配一個空字符串。因此,詞彙分析始終在行首開始記錄FIS,然後解析失敗。
這是我的問題:有沒有辦法修改這個正則表達式來保證它只會匹配一個非零長度的字符串?
編輯 雖然正則表達式已經捕捉它團體,我並不需要捕捉這些羣體。我知道我可以使用非捕獲組,但沒有(?:...)
,它會更清晰一些。
謝謝!不幸的是,這個正則表達式不被Jison支持,但是爲了解決我所問的* actual *問題而得到的讚譽......添加這個*會正確地匹配字符串 – Dancrumb 2010-03-12 07:10:55
糾正......這個正則表達式**被Jison支持。 對於我的具體需求,我必須使用:(?= [^ 0-9 */\ - +()]),以便它不會與其他標記 – Dancrumb 2010-03-12 23:40:36