一重括弧内のすべてに一致するが、二重括弧を無視する正規表現を作成することは可能ですか?たとえば、次のようになります。
{foo} {bar} {{baz}}
foo と bar を一致させたいのですが、baz は一致させませんか?
一重括弧内のすべてに一致するが、二重括弧を無視する正規表現を作成することは可能ですか?たとえば、次のようになります。
{foo} {bar} {{baz}}
foo と bar を一致させたいのですが、baz は一致させませんか?
周囲の中括弧なしでのみ一致foo
さbar
せるには、次を使用できます
(?<=(?<!\{)\{)[^{}]*(?=\}(?!\}))
言語が後読みアサーションをサポートしている場合。
説明:
(?<= # Assert that the following can be matched before the current position
(?<!\{) # (only if the preceding character isn't a {)
\{ # a {
) # End of lookbehind
[^{}]* # Match any number of characters except braces
(?= # Assert that it's possible to match...
\} # a }
(?!\}) # (only if there is not another } that follows)
) # End of lookahead
編集: JavaScript では、後読みはありません。この場合、次のようなものを使用する必要があります。
var myregexp = /(?:^|[^{])\{([^{}]*)(?=\}(?!\}))/g;
var match = myregexp.exec(subject);
while (match != null) {
for (var i = 0; i < match.length; i++) {
// matched text: match[1]
}
match = myregexp.exec(subject);
}
多くの言語で、ルックアラウンド アサーションを使用できます。
(?<!\{)\{([^}]+)\}(?!\})
説明:
(?<!\{)
: 前の文字は{
\{([^}]+)\}
: 中括弧内の何か、例えば{foo}
(?!\})
: 次の文字は}