gpt4 book ai didi

mysql - 如何在 SQL 友好的正则表达式中匹配标签外但不在标签内的 URL

转载 作者:行者123 更新时间:2023-11-28 01:35:58 25 4
gpt4 key购买 nike

我正在尝试检测对网页上可见的 URL 的使用,同时忽略标记内的 URL。这将针对 SQL 查询中的特定数据库字段运行,因此据我所知,前瞻对我不可用。要搜索的字段包含 HTML 页面片段。

我遇到的问题是标签内的 URL 在不应该匹配的情况下匹配。

详情如下:

我正在运行以下正则表达式:

[^=\"\/]([Hh][tT][tT][pP][sS]?:\/\/)?([\w]+\.)*[\w]+\.([A-za-z]+)

针对以下字符串。我希望以 + 开头的 5 个字符串不匹配(被认为是好的),以 - 开头的 7 个字符串匹配(被认为是坏的/可报告的):

(更新:+ 和 - 只是为了显示我希望哪些字符串被认为是好的或坏的。它们不一定会出现在要检查的数据中,并且与问题无关。)

(第二次更新:整个表达式从一开始就是错误的。SQL 显然需要 POSIX,所以我将表达式替换为:

[^.=..".](https?[.:.][./.][...])?(:alnum:)*[:alnum:]+[.period.][:alpha:][:alpha:]+

但是还是不行。我不知道什么匹配什么不匹配的详细信息,但它仍然匹配 HTML 标记内的代码。)

+<a href="http://www.sfmta.com">text is okay</a>    
+<a href="http://WWW.SFMTA.COM" title="Commercial">com</a>
+text is okay
+text is...okay
+000.000.0000
-text is okay com
-text is bad HTTP://WWW.SFMUNI.COM
-<a href="http://www.sfmta.com">http://www.sfmuni.com</a>
-<a href="http://www.sfmta.com">www.sfmuni.com</a>
-<a href="http://www.sfmta.com">sfmuni.com</a>
-text is bad www.sfmuni.com
-text is bad sfmuni.com

出于某种原因,标签中的所有 URL 都匹配,而它们都不应该匹配。

来自 [PHP Live Regex] [1],结果(穿插在原始字符串中):

1.

+<a href="http://www.sfmta.com">text is okay</a>    

预期没有匹配,但是匹配

Array
(
[0] => www.sfmta.com
[1] =>
[2] => ww.
[3] => com
)

2.

+<a href="http://WWW.SFMTA.COM" title="Commercial">com</a>    

预期没有匹配,但是匹配

Array
(
[0] => WWW.SFMTA.COM
[1] =>
[2] => WW.
[3] => COM
)

3.

+text is okay    

如预期的那样不匹配

Array
(
)

4.

+text is...okay    

如预期的那样不匹配

Array
(
)

5.

+000.000.0000    

如预期的那样不匹配

Array

(
)

6.

-text is okay com    

如预期的那样不匹配

Array
(
)

7.

-text is bad HTTP://WWW.SFMUNI.COM    

如预期的那样匹配

Array
(
[0] => HTTP://WWW.SFMUNI.COM
[1] => HTTP://
[2] => WWW.
[3] => COM
)

8.

-<a href="http://www.sfmta.com">http://www.sfmuni.com</a>    

匹配 www.sfmta.com,预计匹配 http://www.sfmuni.com或 www.sfmuni.com

Array
(
[0] => www.sfmta.com
[1] =>
[2] => ww.
[3] => com
)

9.

-<a href="http://www.sfmta.com">www.sfmuni.com</a>    

匹配 www.sfmta.com,预计匹配 www.sfmuni.com

Array
(
[0] => www.sfmta.com
[1] =>
[2] => ww.
[3] => com
)

10.

-<a href="http://www.sfmta.com">sfmuni.com</a>    

匹配 www.sfmta.com,预计匹配 sfmuni.com

Array
(
[0] => www.sfmta.com
[1] =>
[2] => ww.
[3] => com
)

11.

-text is bad www.sfmuni.com    

如预期的那样匹配

Array
(
[0] => www.sfmuni.com
[1] =>
[2] => www.
[3] => com
)

12.

-text is bad sfmuni.com    

如预期的那样匹配

Array
(
[0] => sfmuni.com
[1] =>
[2] =>
[3] => com
)

如何让标签中的 URL 不匹配?在具有 URL 的任何给定标记中,除了 href 或 src 之外,可能还有其他属性。

我还意识到文本中的 URL 从字段的最开头开始,或者如果有人在文本中的 URL 之前键入 =、"或/,这些将被遗漏。这些可能但不太可能。但是如果有人能在合理长度的正则表达式中捕捉到这些内容,那将是一个奖励。但是,对我来说更重要的是不要匹配标签内的 URL。

  [1]: http://www.phpliveregex.com/

最佳答案

我知道那是旧帖子,但也许有人正在寻找 MySQL 中正则表达式的示例:

SELECT str
, str REGEXP '^([.<.].*[.>.])?(.* )?(https?[.:.][./.]{2})?([a-zA-Z0-9]+[.])+[a-zA-Z]{2,6}( .*)?([.<.].*[.>.])?$' address_in_with_text
, str REGEXP '^([.<.].*[.>.])?(https?[.:.][./.]{2})?([a-zA-Z0-9]+[.])+[a-zA-Z]{2,6}([.<.].*[.>.])?$' address_in_tag
, str REGEXP '^.*([a-zA-Z0-9]+[.])+[a-zA-Z]{2,6}.*$' address_in
, str REGEXP '^.*(https?[.:.][./.]{2}).*' http_in
, str REGEXP '^([.<.].*[.>.]).*$' tag_at_begin
, str REGEXP '^.*([.<.].*[.>.])$' tag_at_end
FROM strings;

示例测试数据: 创建表字符串( str varchar(255) 不为空 );

insert into strings values ('<a href="http://www.sfmta.com">text is okay</a>'),
('<a href="http://WWW.SFMTA.COM" title="Commercial">com</a>'),
('text is okay'),
('text is...okay'),
('000.000.0000'),
('text is okay com'),
('text is bad HTTP://WWW.SFMUNI.COM'),
('<a href="http://www.sfmta.com">http://www.sfmuni.com</a>'),
('<a href="http://www.sfmta.com">www.sfmuni.com</a>'),
('<a href="http://www.sfmta.com">sfmuni.com</a>'),
('text is bad www.sfmuni.com'),
('text is bad sfmuni.com'),
('text is bad https://www.sfmuni.com'),
('<a href="http://WWW.SFMTA.COM" title="Commercial">https://com</a>')
;

输出:

|                                                               str | address_in_with_text | address_in_tag | address_in | http_in | tag_at_begin | tag_at_end |
|-------------------------------------------------------------------|----------------------|----------------|------------|---------|--------------|------------|
| <a href="http://www.sfmta.com">text is okay</a> | 0 | 0 | 1 | 1 | 1 | 1 |
| <a href="http://WWW.SFMTA.COM" title="Commercial">com</a> | 0 | 0 | 1 | 1 | 1 | 1 |
| text is okay | 0 | 0 | 0 | 0 | 0 | 0 |
| text is...okay | 0 | 0 | 0 | 0 | 0 | 0 |
| 000.000.0000 | 0 | 0 | 0 | 0 | 0 | 0 |
| text is okay com | 0 | 0 | 0 | 0 | 0 | 0 |
| text is bad HTTP://WWW.SFMUNI.COM | 1 | 0 | 1 | 1 | 0 | 0 |
| <a href="http://www.sfmta.com">http://www.sfmuni.com</a> | 1 | 1 | 1 | 1 | 1 | 1 |
| <a href="http://www.sfmta.com">www.sfmuni.com</a> | 1 | 1 | 1 | 1 | 1 | 1 |
| <a href="http://www.sfmta.com">sfmuni.com</a> | 1 | 1 | 1 | 1 | 1 | 1 |
| text is bad www.sfmuni.com | 1 | 0 | 1 | 0 | 0 | 0 |
| text is bad sfmuni.com | 1 | 0 | 1 | 0 | 0 | 0 |
| text is bad https://www.sfmuni.com | 1 | 0 | 1 | 1 | 0 | 0 |
| <a href="http://WWW.SFMTA.COM" title="Commercial">https://com</a> | 0 | 0 | 1 | 1 | 1 | 1 |

关于mysql - 如何在 SQL 友好的正则表达式中匹配标签外但不在标签内的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182773/

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