[英]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+))\)
我建議用'([^']+)'
'(([^']|\\\\')+)'
替換'([^']+)'
'(([^']|\\\\')+)'
。
字符串用單引號括起來。 它包含以下一個或多個實例:
看起來您必須考慮引號內的任何轉義。
# \((\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.