pcre regex-替换序列化字符串中的URL

np8igboo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(429)

我正在将一些站点迁移到不同的url,不过我注意到数据库中有许多包含url的序列化条目。我已经找到了一个相对简单的正则表达式来匹配以url开头的字符串,但情况并非总是这样。这是我用的正则表达式。

s:(\d+?):\\\"(https?:\/\/)?example\.com

这与以下内容非常匹配: s:15:\"http://example.com\" 但如果两者之间有什么区别,比如: s:15:\"foo bar example.com\" (在本例中只是示例)我尝试添加 .*? 在这里匹配中间的字符,但是正则表达式捕捉的太多了。
热释光;医生,我该如何阻止正则表达式捕捉太多。这是正则表达式,我用它来对付一个伪样本。https://regex101.com/r/3grdlo/1

3zwtqj6y

3zwtqj6y1#

除了中间的转义双引号外,您可以匹配任何文本 s:(\d+):\\\" 剩下的模式是:

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

查看regex演示。
添加的图案是 [^\\]*(?:\\(?!\")[^\\]*)*? : [^\\]* -任何0+字符
\ (?:\\(?!\")[^\\]*)*? -以下顺序的0+次,尽可能少: \\ -反斜杠 (?!\") -不带双引号 [^\\]* -任何0+字符 \

相关问题