0

我有几个带有当前网址的页面:

onclick="location.href='https://www.mydomain.com/shop/bags

在每个网址的末尾都有这样的内容:

?cid=Black'"
or 
?cid=Beige'"
or 
?cid=Green'"

我需要的是?cid=在每个 url 中找到一个正则表达式,然后替换从?cid=到结尾的所有内容'

目前我有这个: .?cid=.*?'

这会?cid=在每一行代码中找到出现。我只希望它在onclick="location.href='https://www.mydomain.com/shop/bags

有人对此有任何解决方案吗?

更新 对不起最初的混乱。我正在使用这个程序http://www.araxis.com/replace-in-files/index-eur.html它允许使用正则表达式来查找元素。我认为它说它允许 PERL 风格的正则表达式。

谢谢

4

3 回答 3

0

您可以使用环视语法来匹配?cid=somethingURL 前面和后面的'

这种模式应该有效:

(?<=\Qhttps://www.mydomain.com/shop/bags\E)\?cid=[^']++(?=')

如果你用你的替换替换那个模式,那么从?ciduntil的整个位'将被替换。

这是 Java 中的示例(忽略略有不同的语法):

public static void main(String[] args) {
    final String[] in = {
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Black'",
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Beige'",
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Green'"
    };
    final Pattern pattern = Pattern.compile("(?<=\\Qhttps://www.mydomain.com/shop/bags\\E)\\?cid=[^']++(?=')");
    for(final String string : in) {
        final Matcher m = pattern.matcher(string);
        final String replaced = m.replaceAll("SOMETHING_ELSE");
        System.out.println(replaced);
    }
}

输出

onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'
onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'
onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'

显然,这假设您的工具支持环视。

如果您只是直接使用 Perl 而不是通过您的魔术工具,这肯定会起作用

perl -pi -e '/s/(?<=\Qhttps://www.mydomain.com/shop/bags\E)\?cid=[^\']++(?=\')/SOMETHING_ELSE/g' *some_?glob*.pattern

编辑

另一个想法是使用捕获组和反向引用,替换

(\Qhttps://www.mydomain.com/shop/bags\E)\?cid=[^']++

$1SOMETHING_ELSE

Java中的另一个测试用例:

public static void main(String[] args) {
    final String[] in = {
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Black'",
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Beige'",
        "onclick=\"location.href='https://www.mydomain.com/shop/bags?cid=Green'"
    };
    final Pattern pattern = Pattern.compile("(\\Qhttps://www.mydomain.com/shop/bags\\E)\\?cid=[^']++");
    for(final String string : in) {
        final Matcher m = pattern.matcher(string);
        final String replaced = m.replaceAll("$1SOMETHING_ELSE");
        System.out.println(replaced);
    }
}

输出:

onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'
onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'
onclick="location.href='https://www.mydomain.com/shop/bagsSOMETHING_ELSE'
于 2013-06-02T12:21:35.347 回答
0

寻找

(onclick="location.href='https://www.mydomain.com/shop/bags.*?)\?cid=.*?'

代替

$1something'
于 2014-01-13T12:39:20.280 回答
-1

你可以使用这个模式

\?cid=[^']*

这个想法是使用排除最终简单引号的字符类,然后避免使用惰性量词。

注意:如果支持,您可以使用所有格量词来减少正则表达式引擎的工作:

\?cid=[^']*+
于 2013-06-02T12:10:38.597 回答