我正在解析.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
如何处理此问题,第二组将字符串与\'
匹配?
答案 0 :(得分:2)
答案 1 :(得分:0)
我建议将'([^']+)'
替换为'(([^']|\\')+)'
。
字符串被单引号括起来。它包含一个或多个实例:
答案 2 :(得分:0)
看起来您必须考虑报价中的任何转义。
# \((\d+),'((?:\\[\S\s]|[^'\\])*)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)
\(
( \d+ ) # (1)
,
'
( # (2 start)
(?: \\ [\S\s] | [^'\\] )*
) # (2 end)
'
(?:
,
( \d+ ) # (3)
)
(?:
,
( \d+ ) # (4)
)
(?:
,
( \d+ ) # (5)
)
\)