0

現在の URL を持つページがいくつかあります。

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

各 URL の末尾には、次のようなものがあります。

?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=somethingして、URL の後に一致させることができます。'

このパターンは機能するはずです:

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

そのパターンを自分の代替品に置き換えると、ビット全体が from ?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 に答える
-1

このパターンを使用できます

\?cid=[^']*

アイデアは、最後の単純な引用符を除外する文字クラスを使用することです。その後、遅延量指定子の使用を避けます。

注: 正規表現エンジンの作業を軽減するためにサポートされている場合は、所有量指定子を使用できます。

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