簡體   English   中英

正則表達式匹配 [^'] 但也匹配字符串中的 \\'

[英]Regular expression to match [^'] but also \' in string

我正在解析一個 .SQL 文件並嘗試將其寫入 Mongodb。

我使用了這個正則表達式,

\((\d+),'([^']+)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

,它適用於大多數情況。

(431532,'Fluorescent_cheese_dyes',0,0,0),(431533,'Christian_Rock_albums',0,0,0),
(431534,'Variety_radio_stations',0,0,0),(431535,'Dean\'s_list',0,0,0),

但是對於最后一個關於\\'情況,它沒有,因為我使用'([^']+)'來匹配字符串。 當我將'([^']+)'更改為'((?:(?:\\')|[^'])+)' ,它將匹配一個實例中的所有案例,而不是 4 個。這些組將像這樣:

1.  431532
2.  Fluorescent_cheese_dyes',0,0,0),(431533,'Christian_Rock_albums',0,0,0),(431534,'Variety_radio_stations',0,0,0),(431535,'Dean\'s_list
3.  0
4.  0
5.  0

我該如何處理這個問題,第二組將字符串與\\'匹配?

只需使用非貪婪. ( .+? )

\((\d+),'(.+?)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

示例: https : //regex101.com/r/zV0lZ1/1

我建議用'([^']+)' '(([^']|\\\\')+)'替換'([^']+)' '(([^']|\\\\')+)'

字符串用單引號括起來。 它包含以下一個或多個實例:

  • 除單引號外的字符,或
  • 單引號被一個反斜杠轉義

看起來您必須考慮引號內的任何轉義。

 # \((\d+),'((?:\\[\S\s]|[^'\\])*)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

 \(
 ( \d+ )                             # (1)
 ,
 '
 (                                   # (2 start)
      (?: \\ [\S\s] | [^'\\] )*
 )                                   # (2 end)
 '
 (?:
      ,
      ( \d+ )                        # (3)
 )
 (?:
      ,
      ( \d+ )                        # (4)
 )
 (?:
      ,
      ( \d+ )                        # (5)
 )
 \)

暫無
暫無

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

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