簡體   English   中英

正則表達式用於可選引號,哈希數組和空字符串

[英]Regex for optional quotes, array of hashes and empty string

我想編寫一個正則表達式以在ruby中接受以下類型-

1)“ value1”

2)'value2'

3)“”或“

4)[{:this =>:that,“ that” =>:this},{'foo'=>:bar},{:bar =>'foo'}]

到目前為止,我有以下內容-

regex = /(["']?)([^'"].*?[^'"])\1/

這樣做的問題是它不接受空字符串“”和“”。

您可以提出任何替代或改進建議嗎?

我不知道正則表達式紅寶石使用什么,但是假設它與Perl兼容:

regex = /(["'])(?:\\.|.)*?\1/

演示: http//regex101.com/r/iP8hY8/1

該表達式將使您可以對字符串"like \\" that"引號進行轉義。

這里的訣竅是使用替代方式,使替代方式的第二部分( . )永遠無法匹配反斜杠。 非貪婪量詞可確保反向引用首先匹配結尾的引用。


編輯:實際上,我認為我誤解了您問題中的第四點。

如果您希望正則表達式匹配值數組,則必須創建更多... parser-like ,如下所示:

(?<value>
  (?<string>(?<quote>["'])(?:\\.|.)*?\k<quote>|:\w+)
|
  (?<hash>\{
    (?:(?:(?<hashitem>\s*\g<string>\s*=>\s*\g<value>\s*),\s*)*\g<hashitem>
    |\s*)
  \})
|
  \[
    (?:(?:\s*\g<value>\s*,\s*)*\g<value>
    |\s*)
  \]
)

演示: http//regex101.com/r/iP8hY8/2

這個表達式實際上也會處理字符串數組。 請注意,我沒有為數字添加任何內容,因為您沒有提及它們。

如果您只想只匹配哈希數組,則可以對上面的表達式進行一些調整:

(?<value>
  (?<string>(?<quote>["'])(?:\\.|.)*?\k<quote>|:\w+)
|
  (?<hash>\{
    (?:(?:(?<hashitem>\s*\g<string>\s*=>\s*\g<value>\s*),\s*)*\g<hashitem>
    |\s*)
  \})
|
  \[
    (?:(?:\s*\g<hash>\s*,\s*)*\g<hash>
    |\s*)
  \]
)

我會讓您進一步調整以適應您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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