我有几个页面与当前网址:
onclick="location.href='https://www.mydomain.com/shop/bags
在每个网址的末尾都有这样的内容:
?cid=Black'"
or
?cid=Beige'"
or
?cid=Green'"
我需要的是正则表达式,以便在每个网址中找到?cid=
,然后替换从?cid=
到结尾'
的所有内容
我有这个:
.?cid=.*?'
这会在每行代码中找到?cid=
的出现。我只希望它在onclick="location.href='https://www.mydomain.com/shop/bags
有人为此得到任何解决方案吗?
更新 抱歉最初的困惑。我正在使用这个程序http://www.araxis.com/replace-in-files/index-eur.html,它允许使用正则表达式来查找元素。我认为它说它允许PERL风格的正则表达式。
由于
答案 0 :(得分:0)
您可以使用lookaround语法匹配网址前面的?cid=something
,后跟'
这种模式应该有效:
(?<=\Qhttps://www.mydomain.com/shop/bags\E)\?cid=[^']++(?=')
如果您使用替代品替换该模式,则会替换从?cid
到'
的整个位。
以下是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'
答案 1 :(得分:0)
查找
(onclick="location.href='https://www.mydomain.com/shop/bags.*?)\?cid=.*?'
替换
$1something'
答案 2 :(得分:-1)
你可以使用这种模式
\?cid=[^']*
我们的想法是使用一个排除最终简单引号的字符类,然后避免使用惰性量词。
注意:如果支持,您可以使用占有量词来减少正则表达式引擎的工作:
\?cid=[^']*+