gpt4 book ai didi

mysql - 正则表达式搜索mysql文本列

转载 作者:行者123 更新时间:2023-11-29 15:01:42 26 4
gpt4 key购买 nike

好的,我认为普通的正则表达式会伤脑筋,但是我似乎找不到要在mysql中使用正则表达式查找的内容。

我正在尝试寻找新闻文章中的情况,其中纺织格式的网址未以斜杠结尾,因此:

“ Catherine Zeta-Jones”:/ cr / catherinezeta-jones /已访问堆栈溢出是可以的,但是
“ Catherine Zeta-Jones”:/ cr / catherinezeta-jones访问堆栈溢出不是。

[仅以凯瑟琳为例,因为我假设Alpha搜索不会捕获连字符]

这些日子之一,我将不得不做那只山羊牺牲,这样我才能获得有关正则表达式的适当知识。

感谢大家!

最佳答案

我认为您最终会得到以下正则表达式:"((?:[^"]|\\")*)":(\S*/)(?=\s)。分解如下:


"匹配文字引号。
`(?:[^“] | \”)*匹配(不捕获)内部;也就是说,任意一个(零个或多个):


[^"](非引号字符),或
\\",转义的引号。

"匹配文字引号。
:匹配文字冒号。
\S*匹配零个或多个非空格字符
/与文字斜杠匹配
(?=\s)是一个超前字符,如果下一个字符是空白字符则匹配。


此后,第一个捕获组(通常为$1)将包含链接文本,而$2将包含链接URL。它只会匹配所需格式的链接。如果要匹配所有链接,只需删除/,然后删除所有不以一个结尾的URL。



编辑:据我所知,MySQL显然没有\s\S(?:...)或(?=...)。替换\s\S很容易:只需使用[[:blank:]][^[:blank:]]。替换(?:...)也很容易,因为我想在这种情况下,您不必关心哪个组捕获了什么:只需将所有(?:...)替换为(...)。通常,替换前瞻性很棘手,但在这种情况下应该可以实现:据我所知,实际上您并不在乎比赛的末尾是否包含空格。因此,您可以匹配您要向前看的内容,而不是简单地向前看(或在我的第一个答案中省略的字符串结尾$)。为了稍微完善一点,这里有两个regexen:


"(([^"]|\\")*)":([^[:space:]]*/)([[:space:]]|$),与以反斜杠结尾的Textile URL匹配;要么
[编辑:损坏!] "(([^"]|\\")*)":([^[:space:]]*[^/])([[:space:]]|$),与没有以斜杠结尾的Textile URL匹配。




编辑:我上次几乎可以工作。但是,请考虑类似"text":/url/的内容。 [^[:space:]]*将获取/url/[^/]将获取第一个空格,而([[:space:]]|$)将获取第二个空格,从而告诉您它不匹配。为了解决这个问题,我们告诉它URL的最后一个字符也必须是非空格字符。这样做,并删除一些多余的括号,可以使我们


"([^"]|\\")*":[^[:space:]]*/([[:space:]]|$),与以反斜杠结尾的Textile URL匹配;要么
"([^"]|\\")*":[^[:space:]]*[^/[:space:]]([[:space:]]|$),与不以斜杠结尾的Textile URL匹配。


这几乎够好了。但是,事实并非如此。尽管在URL上,诸如,之类的标点在技术上是合法的,但Textile不允许这样做。但是,它关于URL何时结束的规则比较模糊:"common punctuation … can reside at the end of a URL."而且,还可以将链接括在方括号中,而此正则表达式也不会捕获。甚至还没有开始处理链接查找表。

修改内容以应对,的情况很容易:随处可见[:space:],将其替换为[:space:],,并在,之后包含其他所需内容。这是因为在上述regexen中,[:space:]代表“非法URL字符”。修改内容以解决括号问题比较困难,但最好通过将]当作逗号来实现。使用此正则表达式无法处理链接查找表。正则表达式可能与(未经测试的)^[[:space:]]*\[[^\]]*\].*[^/]$相似,但我几乎肯定地说,这会遗漏极端情况(变得太多,太少或两者兼有),并且可能存在其错误。拥有。您当然不知道是否仅通过regexen使用过定义的链接。

然后,最后的复杂性提出了另一个问题:您到底在做什么?我知道现在您正在执行SELECT ... WHERE ...,但这是什么意思?我问的原因是该任务不再真正适合于regexen。您应该使用解析器或类似的东西。并取决于您为什么这样做,这可能是可行的。

关于mysql - 正则表达式搜索mysql文本列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com