regex 正则表达式查找具有特定域的href和nofollow的特定锚标记

wz3gfoph  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(69)

我有一个包含html的字符串,我需要一个正则表达式来获取具有特定域名且具有noFollow的字符串
我发现这对域名有效,但不包括nofollow条件(〈a\s*(?!.\brel=)[^〉])(href=“https?://)((?stackoverflow)[^"]+)"([^〉]*)〉
假设我想要的域名是stackoverflow示例:

- "<a href="stackoverflow.com" rel = "nofollow">click here </a>" this would match
- "<a href="stackoverflow.com"> would not match since it has no follow
- "<a href="google.com" rel = "nofollow"> would not match
zengzsys

zengzsys1#

将HTML标记与特定条件匹配有点困难,但下面的正则表达式应该可以做到这一点:

select regexp_match(str, '<a((?:\s+(([^\/=''"<>\s]+)(=((''[^'']*'')|("[^"]*")|([^\s<>''"=`]+)))?)))* href=((''(https?:\/\/)?stackoverflow\.com[^'']*'')|("(https?:\/\/)?stackoverflow\.com[^"]*"))((?: (([^\/=''"<>\s]+)(=((''[^'']*'')|("[^"]*")|([^\s<>''"=`]+)))?)))*\s+rel=("nofollow"|''nofollow'')((?: (([^\/=''"<>\s]+)(=((''[^'']*'')|("[^"]*")|([^\s<>''"=`]+)))?)))*\/?>') from tes;

它 * 真的 * 很难读,但是基本上大多数正则表达式都是用来匹配属性的,对你来说重要的是找到stackoverflow\.com它可以被找到2次;一个用单引号表示href,另一个用双引号表示),并将其替换为所需的任何域(不要忘记正确转义)。

一些注解

我不知道你想使用哪个regexp函数,但是你应该可以把它和你需要的任何regexp函数一起使用。另外一件事是你的例子<a href="stackoverflow.com" rel = "nofollow">click here </a>不会匹配。因为属性名称和=符号之间有空格(我不知道这是否是有效的HTML或没有)。它将与此<a href="stackoverflow.com" rel="nofollow">click here </a>工作。如果您需要匹配的地址可能包括=符号之间的空格只是注解我和我'我将尝试编辑正则表达式。

相关问题