[英]What is Regular expression to identify string literals in java?
我正在嘗試編寫需要識別字符串文字的解析器,如果我的字符串以'(即單引號)開頭和結尾,那么識別字符串文字的正則表達式將是什么?
我正在使用javacc編寫解析器。 有人可以用令牌格式的實際正則表達式代碼幫助我嗎? 我已經盡力了。
例如。
<INTEGER_VALUE:“ 0” | ([“ 1”-“ 9”]([“ 0”-“ 9”])*)>
這是用於標識整數文字的令牌格式,我想要用於字符串文字的相同令牌格式,其中字符串以單引號開頭和結尾,我也嘗試使用元字符(在http://www.vogella.com/articles/JavaRegularExpressions/article中給出.html教程),但沒有成功的結果。
我假設您正在使用JavaCC。 答案取決於您語言中字符串的語法。 假設除了撇號外,字符串中還可以包含任何字符。 即,字符串由兩個撇號和介於兩者之間的任意數量(0個或更多)的非撇號組成。
<STRING: "'" (~["'"])* "'">
現在,許多語言都不允許換行符或字符串返回。 所以在這里我們也禁止它們:
<STRING: "'" (~["'","\n","\r"])* "'">
現在的問題是:如果有人想用撇號,換行符或返回值怎么辦? 有些語言(例如C)使用反斜杠作為轉義符,所以我們說
這是表達
<STRING: "'" ("\\" ("\\" | "n" | "r" | "'") | ~["\\","\n","\r","'"] )* "'"
也就是說,字符串是兩個撇號,中間有0個或多個組,每個組是兩個字符序列\\\\,\\ n,\\ r,\\'之一,或者不是反斜杠的字符a換行符,返回或撇號。
另一種方法是使用詞匯狀態。
<DEFAULT> MORE: { "'" : INSTRING }
<INSTRING> MORE: { "\\\\"
| "\\n"
| "\\r"
| "\\'"
| ~["\\","\n","\r","'"]
}
<INSTRING> TOKEN: { "'" : DEFAULT }
距離不夠近,請考慮以下因素
// 'here is comment'
'is't correct string?'
您有單引號但肯定不是字符串的地方。 如果您確定要刪除注釋,並且引號之間的任何符號都將轉義\\'(就像大多數編程語言一樣)。 我相信,那么一切都會像您所描述的算法一樣好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.