我有一个包含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。