Regex查找具有特定域和nofollow的href的特定锚标记

  • 本文关键字:href nofollow 查找 Regex regex
  • 更新时间 :
  • 英文 :


我有一个包含html的字符串,我想要一个正则表达式,让我有一个特定域名的字符串,并有noFollow

我发现这将在域名上做工作,但不包括nofollow条件(& lt; 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 

将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>一起工作。如果你需要匹配地址,可能包括=符号之间的空格只是评论我,我会尝试编辑regex。

最新更新