我在尝试正常表达时遇到问题。基本上,我有一个包含各种链接的HTML字符串。如果href属性指向同一域或已批准域列表中的域,则不会更改任何内容。应将其他任何内容更改为重定向页面,并将原始href作为URL参数
例如,假设允许以下域名:domain1, domain2, domain3
和不允许的域指向“/redirect.htm?url = ...”
我想要以下字符串
<p>this is a paragraph with
<a href="/index.htm">link 1</a> and
<a href="http://domain4/page.htm">link 2</a> and
<a href="http://www.domain1.com">link3</a> and
<a href="http://www.domain5.com/directory/page.htm">link 4</a>
</p>
更改为:
<p>this is a paragraph with
<a href="/index.htm">link 1</a> and
<a href="/redirect.htm?url=domain4/page.htm">link 2</a> and
<a href="http://www.domain1.com">link3</a> and
<a href="/redirect.htm?url=www.domain5.com/directory/page.htm">link 4</a>
</p>
我还应该指出,我正在使用IdocScript,这是一种基于Java的自定义语言,适用于我们的内容管理系统。我不需要帮助,只需要正则表达式。
到目前为止,我提出的最好(显然不起作用)是:<$ regex = "href=\"(^(/|domain1|domain2|domain3)" $>
<$ regexReplaceAll( originalString, regex, 'href="/redirect.htm?url=$1') $>
有人可以帮忙吗?
答案 0 :(得分:0)
s/href="(?!=(\/|.*(domain1|domain2|domain3)))/href="\/redirect.htm?url=/
如果我们有一个href,并且它不是以斜杠开头且它不包含domain1,domain2或domain3,请插入重定向。
如果需要,您可以收紧并查找特定的子域名:
s/href="(?!=(\/|http://((www|mobile|mysubdomain)\.)?(domain1|domain2|domain3)))/href="\/redirect.htm?url=/
取一个href="
后面没有[斜杠]或[可选子域名和其中一个列出的域名],将其替换为相同的href="
+ /redirect.htm?url=
。< / p>
我已经逃脱了斜线,但在您选择的正则表达方言中可能没有必要。
答案 1 :(得分:0)