近く違法繰り返し私はJava8を使用していますが、文字列からアドレスをフィルタリングするために、次の正規表現を使用したいが、私はこのエラーを取得:java.util.regex.PatternSyntaxException:インデックス
エラー
すべてのヘルプは感謝private static final String REGEX_ROAD = "(?i)\\b(street|st|road|rd|avenue|ave|drive|dr|loop|court|ct|circle|cir|lane|ln|boulevard|blvd|way)\\.?\\b";
private static final String REGEX_APT = "(?i)\\b(apt|bldg|dept|fl|hngr|lot|pier|rm|ste|slip|trlr|unit|#)\\.? *[a-z0-9-]+\\b";
private static final String REGEX_POBOX = "/P\\.? ?O\\.? *Box +\\d+";
private static final String REGEX_STREET = "(\\d+\\s*(\\w+){1,2}${"+REGEX_ROAD+"}(\\s+${"+REGEX_APT+"})?)|(${"+REGEX_POBOX+"})";
input = input.replaceAll(REGEX_STREET, "<ADDRESS>");
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 18
(\d+\s*(\w+){1,2}${(?i)\b(street|st|road|rd|avenue|ave|drive|dr|loop|court|ct|circle|cir|lane|ln|boulevard|blvd|way)\.?\b}(\s+${(?i)\b(apt|bldg|dept|fl|hngr|lot|pier|rm|ste|slip|trlr|unit|#)\.? *[a-z0-9-]+\b})?)|(${/P\.? ?O\.? *Box +\d+})
^
コード。
クラス全体:Javaは、文字列の補間をサポートしていません
package com.jobs.spring.service.replace;
public class ReplaceServiceImpl implements ReplaceService {
private static final String REGEX_ROAD = "(?i)\\b(street|st|road|rd|avenue|ave|drive|dr|loop|court|ct|circle|cir|lane|ln|boulevard|blvd|way)\\.?\\b";
private static final String REGEX_APT = "(?i)\\b(apt|bldg|dept|fl|hngr|lot|pier|rm|ste|slip|trlr|unit|#)\\.? *[a-z0-9-]+\\b";
private static final String REGEX_POBOX = "/P\\.? ?O\\.? *Box +\\d+";
private static final String REGEX_STREET = "(\\d+\\s*(\\w+){1,2}${"+REGEX_ROAD+"}(\\s+${"+REGEX_APT+"})?)|(${"+REGEX_POBOX+"})";
@Override
public String removePII(String input) {
input = input.replaceAll(REGEX_STREET, "<ADDRESS>");
return input;
}
public static void main(String[] args) {
ReplaceService rep = new ReplaceServiceImpl();
System.out.println(rep.removePII("1234 Flex Road and 21 happy street"));
}
}
'$ {'とそれに続く '}'を削除すると、パターンを動的に構築するのに十分です。 –
もう一度WiktorStribiżewさん、ありがとうございました。 – Richard
他の人があなたの質問に入れて答えを受け入れる努力を感謝してみませんか? – kism3t