簡単な答え
中括弧で囲まれたすべての文字列を見つけるには、再一致と単純な式を使用できます\{[^{}]+\}
説明
各中括弧の前のバックスラッシュ\
はそれらをエスケープし、文字通りの中括弧として機能させます (それ以外の場合は特別な意味を持ちます)。
[^
...は負の]
文字クラスであり、含まれている文字の 1 つではない単一の文字に一致することを示し、貪欲な+
量指定子は、前の項目からできるだけ多く、ただし少なくとも 1 つに一致するように指示します。
したがって[^{}]+
、中括弧の間で使用すると、ネストされた中括弧または一致しない中括弧と一致しないことを意味します。( using\{.*?\}
は 2 つの左中かっこに一致する可能性があります。注:*?
は遅延量指定子であり、(可能であれば) 何にも一致しませんが、必要な数だけ一致します。)
詳細な回答
ただし、結果はクエリから得られると言うので、扱っている値のみを一致させる方法は、クエリの ColumnList を使用して式を形成することです。
`\{(#ListChangeDelims(QueryName.ColumnList,'|')#)\}`
これにより、ColumnList がパイプで区切られたリスト (括弧でグループ化された代替のセット) に変更されます。つまり、生成されたパターンは次のようになります。
\{(first_name|towncity|email)\}
(そのグループの内容がキャプチャ グループ 1 に移動します)。
実際にテキストを入力するには(単に一致させるのではなく)、同様のことを行うことができますが、ここでは正規表現が必要ないことを除いて、列をループしながら単純に置き換えるだけです:
<cfloop index="CurColumn" list=#QueryName.ColumnList#>
<cfset text = replace( text , '{#CurColumn#}' , QueryName[CurColumn][CurrentRow] , 'all' ) />
</cfloop>
(これは標準的な置換であるため、中括弧をバックスラッシュでエスケープする必要はありません。ここでは特別な意味はありません。)