正規表現で次のものを取得しようとしています
入力-
{foo}
{bar}
\{notgood}
\{bad}
{nice}
\{bad}
出力-
foo
bar
nice
で始まるが、で{
はないすべての文字列を検索したい\{
。入力できる単語は 5 つだけです。
"\\{(foo|bar|nice|notgood|bad)"
で始まるすべての単語を与える正規表現 ie を試しました{
。を取り除く方法がわかりません\{
。どうやってやるの?
否定後読みアサーションを使用して、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"]
。
次のコードのように、'group-match' 文字列を使用できます。
str.replaceAll("(?<!\\\\)\\{(foo|bar|nice|notgood|bad)\\}", "$1");
入力の$1
最初の()
グループを参照します
それはあなたにstr = "{foo} \{bar} {something}"
与えるからですfoo \{bar} {something}