PCRE正则表达式-替换序列化字符串中的URL

时间:2018-10-02 16:40:14

标签: mysql regex serialization grep pcre

我将一些站点迁移到不同的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

1 个答案:

答案 0 :(得分:1)

您可以在s:(\d+):\\\"和模式的其余部分之间匹配任何文本,但转义双引号除外:

s:(\d+):\\\"[^\\]*(?:\\(?!\")[^\\]*)*?(https?:\/\/)?example\.com

请参见regex demo

添加的模式为[^\\]*(?:\\(?!\")[^\\]*)*?

  • [^\\]*-除\以外的任何0+个字符
  • (?:\\(?!\")[^\\]*)*?-至少0次出现,顺序如下:
    • \\-反斜杠
    • (?!\")-不带双引号
    • [^\\]*-除\以外的任何0+个字符