首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法完全正确地获得RegEx

无法完全正确地获得RegEx
EN

Stack Overflow用户
提问于 2013-11-12 10:06:50
回答 2查看 77关注 0票数 0

我有问题,试图使我的正则表达式正确。基本上,我有一个HTML字符串,它包含各种链接。如果href属性指向同一域或已批准域列表中的域,则不会更改任何内容。其他任何内容都应该更改为重定向页面,并将原来的href作为URL参数

例如,假设允许使用下列域名:

代码语言:javascript
复制
domain1, domain2, domain3

不允许的域指向“/redirect.htm?url=.”

我需要下面的字符串

代码语言:javascript
复制
<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>

改为:

代码语言:javascript
复制
<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的自定义语言,用于我们的内容管理系统。我不需要帮助,只需要正则表达式。

到目前为止,我想出的最好的方法(显然行不通)是:

代码语言:javascript
复制
<$ regex = "href=\"(^(/|domain1|domain2|domain3)" $>
<$ regexReplaceAll( originalString, regex, 'href="/redirect.htm?url=$1') $>

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 10:14:42

代码语言:javascript
复制
s/href="(?!=(\/|.*(domain1|domain2|domain3)))/href="\/redirect.htm?url=/

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

如果需要,您也可以收紧并查找特定的子域:

代码语言:javascript
复制
s/href="(?!=(\/|http://((www|mobile|mysubdomain)\.)?(domain1|domain2|domain3)))/href="\/redirect.htm?url=/

以一个href="为例,它后面没有斜杠,也没有可选的子域和列出的域之一,代之以相同的href=" + /redirect.htm?url=

我已经逃过了斜杠,但在你选择的regex方言中,这可能是不必要的。

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 10:24:08

这个应该适合你的需要:

代码语言:javascript
复制
href="https?://((?:[^"](?<!\b(?:domain1|domain2|domain4)\b))+)"

代之以:

代码语言:javascript
复制
href="/redirect.htm?url=$1"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19926219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档