Can';我不太理解Java正则表达式

Can';我不太理解Java正则表达式,java,regex,Java,Regex,我在尝试正确使用正则表达式时遇到问题。基本上,我有一个包含各种链接的HTML字符串。如果href属性指向同一个域或已批准域列表中的域,则不会更改任何内容。其他任何内容都应更改为重定向页面,并将原始href作为URL参数 例如,假设允许以下域名: domain1, domain2, domain3 不允许的域指向“/redirect.htm?url=…” 我想要下面的字符串 <p>this is a paragraph with <a href="/index.htm

我在尝试正确使用正则表达式时遇到问题。基本上,我有一个包含各种链接的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的定制语言。我不需要帮助,只需要正则表达式

到目前为止,我想到的最好的(显然不起作用)是:


如果我们有一个href,它不以斜杠开头,也不包含domain1、domain2或domain3,请插入重定向

如果需要,您还可以加紧查找特定子域:

s/href="(?!=(\/|http://((www|mobile|mysubdomain)\.)?(domain1|domain2|domain3)))/href="\/redirect.htm?url=/
取一个
href=“
后面不跟[斜杠]或[可选子域和列出的域之一],将其替换为相同的
href=“
+
/redirect.htm?url=


我避开了斜杠,但在您选择的正则表达式方言中,这可能不是必需的。

这一个应该适合您的需要:


href=“https?:/((?:[^“])(?有。我不想假装理解这一点,但它是有效的。谢谢
s/href="(?!=(\/|.*(domain1|domain2|domain3)))/href="\/redirect.htm?url=/
s/href="(?!=(\/|http://((www|mobile|mysubdomain)\.)?(domain1|domain2|domain3)))/href="\/redirect.htm?url=/