私は特定のパターンで文字列を収集する必要がある次のパターンのための正規表現を構築するための助けが必要です。Java Regex building
サンプル入力文字列:
*!
hostname ${hostname} !
!
!
ip name-server ${ip-name-server}
no ipv6 cef
!
!
voice class codec 1
codec preference 1 ${codec-pref-1} codec preference 2 ${codec-pref-2} codec preference 3 ${codec-pref-3} !
!
session target dns:${session-targ-DNS} dtmf-relay rtp-nte*
出力は ホスト名、 IP-ネームサーバ、 コーデック-県-1、 コーデック-県-2、 する必要がありますcodec- pref-3, session-targ-DNS、
つまり、$ {string}の形式の文字列を収集して取得する必要があります。
私は
public void fetchKeyword(String inputString) {
String inputString1 = inputString.replace("\n", " ");
Pattern p = Pattern.compile("\\${$1} ");
Matcher m = p.matcher(inputString1);
int i=0;
while(m.find()){
System.out.println(m.group(i));
i++;
}
}
以下のようなコードを試してみました。また、私はパターンが.${.*}
、(.)${.*?}
などが好き試みたが、予想通り何の結果は来ませんでした。私は以下のような例外を持っています
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1
\${$1}
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at myUtil.ReplaceString.fetchKeyword(ReplaceString.java:70)
at myUtil.ReplaceString.main(ReplaceString.java:20)
誰でも同じようにお手伝いできますか?
'{'と '}'は正規表現では特別です( 'x {3,5}'(xは3〜5回繰り返されます)のような限定的な繰り返しを指定できます)。だから、 '$'だけでなく、それらもエスケープする必要があります。 – RealSkeptic