簡體   English   中英

什么是正則表達式來標識Java中的字符串文字?

[英]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)使用反斜杠作為轉義符,所以我們說

  • \\'表示撇號
  • \\ n表示換行符
  • \\ r表示返回
  • \\\\表示反斜杠
  • \\ x其中x是其他任何字符都被視為錯誤

這是表達

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM