1

正規表現で次のものを取得しようとしています

入力-

{foo}
{bar}
\{notgood}
\{bad}
{nice}
\{bad}

出力-

foo
bar
nice

で始まるが、で{はないすべての文字列を検索したい\{。入力できる単語は 5 つだけです。

"\\{(foo|bar|nice|notgood|bad)"で始まるすべての単語を与える正規表現 ie を試しました{。を取り除く方法がわかりません\{。どうやってやるの?

4

2 に答える 2

5

否定後読みアサーションを使用して、a が前に{ない場合にのみ一致することを確認できます。\

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile(
    "(?<!\\\\)   # Assert no preceding backslash\n" +
    "\\{         # Match a {\n" +
    "(foo|bar|nice|notgood|bad) # Match a keyword\n" +
    "\\}         # Match a }", 
    Pattern.COMMENTS);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group(1));
} 

matchListが含まれます["foo", "bar", "nice"]

于 2012-05-04T16:31:23.450 に答える
0

次のコードのように、'group-match' 文字列を使用できます。

str.replaceAll("(?<!\\\\)\\{(foo|bar|nice|notgood|bad)\\}", "$1");

入力の$1最初の()グループを参照します

それはあなたにstr = "{foo} \{bar} {something}"与えるからですfoo \{bar} {something}

于 2012-05-04T16:23:11.453 に答える