1

削除したいトラッキング文字列を含む文字列があります。正規表現が最善の解決策のように見えましたが、機能する正規表現を見つけることができません。

URLの例:

tracking=fooトラッキングのないURLには触れないでfooください。&

私が作業したベストショットは、 -part/(http:\/\/[^?]*?.*)tracking=[^&]*&?(.*?["|\'])/iとの一致が多すぎるため、追跡文字列の後にURLに2番目のパラメーターがない場合、リンクの背後にあるすべてのものが削除されます。[^&]*

そして、私は現在$html、出力されるページのhtml全体が含まれているので、このように使用しています。次のURL内のすべてのURLからトラッキングを削除したいと思います。

$html = preg_replace($pattern, '$1$2', $html);

したがって、$htmlに含まれる最小値は次のようになります。

<body>
 <a href="[one of the examples above]">Some Link</a>
</body>
4

3 に答える 3

4

parse_urlこれを行うには、とを使用してURLを解析しますparse_str。正規表現を使用するよりもはるかに簡単です。

<?php
$params = array();

$url = "http://example.com/bar.php?param=baz&tracking=foo";
$url_parts = parse_url( $url);

parse_str( $url_parts['query'], $params);

// Remove the "tracking" parameter
if( isset( $params['tracking'])) {
    unset( $params['tracking']); 
}

$url_partsここで、の部分との残りのパラメータを使用して文字列を再構築する必要があります$params。これは。で行うことができますhttp_build_query

私はそれをテストしていないので、いくつかの変更が必要になりますが、このようなものを試してください:

$url = $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . '?' . http_build_query( $params);

特定のユースケースでは、PHPのDOMDocumentクラスを使用してHTMLを解析し、そこからすべてのURLを取得してから、上記を使用してトラッキングパラメーターを削除します。ただし、正規表現を使用する必要がある場合は、一般的な正規表現を使用してURLだけを検索し、を使用して検索した各URLに上記を適用できますpreg_replace_callback

于 2012-04-24T12:12:06.193 に答える
2
/tracking=.*?(?=(&|$|\r|"))/

すべてのtracking=foo変数に一致する必要があります。空の文字列に置き換えるだけです。

http://regexr.com?30ofo

于 2012-04-24T12:22:39.753 に答える
0

独自の正規表現の変更として(http:\/\/[^?]*?.*)(tracking=[^&]*)(.*)?

一致する場合は、文字列から2番目のグループ(トラッキングのあるグループ)を削除します

于 2012-04-24T12:33:04.063 に答える