【发布时间】:2019-03-07 20:11:39
【问题描述】:
我正在将一些站点迁移到不同的 URL,但我注意到数据库中有很多包含 URL 的序列化条目。我想出了一个相对简单的正则表达式来匹配以 URL 开头的字符串,但情况并非总是如此。这是我正在使用的正则表达式。
s:(\d+?):\\\"(https?:\/\/)?example\.com
这与以下内容完美匹配:
s:15:\"http://example.com\" 但如果它之间有什么像:s:15:\"foo bar example.com\"
(在这种情况下只是例子)
我尝试在此处添加.*? 之类的内容以匹配其间的字符,但随后正则表达式捕获了太多内容。
tl;dr 我如何停止正则表达式捕获太多。 这是我对虚拟样本使用的正则表达式。 https://regex101.com/r/3GRdLO/1
【问题讨论】:
-
尝试
[^"]*?(除"之外的任何字符,0+次,尽可能少)而不是.*?。见demo。 -
您好 Wiktor,感谢您的调查。看起来比以前更近了一点,尽管我认为我仍然会遇到一个不匹配的问题。即,如果该 URL 在 标记内(如果网站是使用页面构建器构建的,则通常是这种情况),例如regex101.com/r/3GRdLO/3
-
试试
s:(\d+):\\\"[^\\]*(?:\\(?!\")[^\\]*)*?(https?:\/\/)?example\.com,见demo。
标签: mysql regex serialization grep pcre