0

次のようにahrefのURLを解析するための次の正規表現スニペットがあります。

(?<=href=)[^\"']+(?=(\"|'))?>

私がやろうとしているのは、次のスニペットをデータに置き換えることです。実行時に入力します。

<a href=$tracking_url$&langding_url=google.com>
   <img src="irreleavnt" />
</a>

次のように replaceAll() を試すと、失敗します

 String fragment = <a href=$click_tracking_url$&landing_url=google.com><img src=\"10.gif\" /></a>
 String processedFragment = fragment.replaceAll(AHREF_REGEX, ahrefurl);

エラーは次のとおりです。

java.lang.IllegalArgumentException: Illegal group reference
    at java.util.regex.Matcher.appendReplacement(Matcher.java:724)
    at java.util.regex.Matcher.replaceAll(Matcher.java:824)
    at java.lang.String.replaceAll(String.java:1572)

一致するように正規表現を修正するにはどうすればよい<a href=$click_tracking_url$ですか? $どうすれば正規表現から逃れることができますか?

4

3 に答える 3

0

ここで、これを試してみてください。これを交換して...

(?<=href=)(['"]?)\\$([^$>]+)\\$

...これとともに:

$1$url

バックスラッシュをエスケープすることを忘れないでください。

于 2012-10-24T20:44:00.443 に答える
0

私があなたの質問を正しく理解していれば、$someIdentifier$逆参照するために someIdentifier を使用しているアプリケーションで、 の形式のパターンを何らかの値に置き換えようとしています。

パターンを使用\$([^\$]+)\$して文字列内の各出現箇所を見つけ、グループ 1 (1) の値を取得し、その値を検索して、その特定のシーケンスのすべての出現箇所を検索した値に置き換えたいと思われます。

   String someString = "some$string$withatoken";
   Pattern tokenPattern = Pattern.compile("\\$([^\\$]+)\\$");
   Matcher tokenMatcher = tokenPattern.matcher(someString);
   // find not matches.  matches will compare the entire string against the pattern
   // basically enforcing ^{pattern}$.
   while (tokenMatcher.find()) {
       String tokenName = tokenMatch.group(1);
       String tokenValue = tokenMap.get(tokenName); // lookup value of token name.
       someString = someString.replaceAll("\\$" + tokenName + "\\$", tokenValue);

       // resets the target of the matcher with the new value of someString.
       tokenMatcher.reset(someString);
   }
于 2012-10-24T20:46:24.730 に答える
0

ええと..正規表現を試しましたが、エラーは発生しませんでした。ただし、正規表現は$click_tracking_url$要素の終わりまでテキスト全体を置き換えませんでした。

プレースホルダーを動的に置き換える必要がある場合は、次のようにしてみてください。

Map<String, String> placeholders = new HashMap<String, String>();
// init your placeholders somehow...
placeholders.put("click_tracking_url", "something");

String fragment = "<a href=\"$click_tracking_url$&landing_url=google.com\"><img src=\"10.gif\" /></a>";
Matcher m = Pattern.compile("\\$(\\w+)\\$").matcher(fragment);
if (m.find()) { 
   String processedFragment = m.replaceAll(placeholders.get(m.group(1)));
   System.out.println(processedFragment);
}
于 2012-10-24T20:48:10.763 に答える