1

これは重複していると確信していますが、正しい検索条件が見つかりません。

基本的に、中括弧で囲まれたキーワードを含むユーザー指定の文字列があります。キーワードを見つけるが、区切り文字の二重セットを無視する正規表現が必要です。

例: 「{{hat}} をかぶった猫は {back} をかみません。」

{back} を返すが {hat} を返さない正規表現が必要です。

これはC#用です。

4

4 に答える 4

2

これはあなたが探しているものです

(?<!\{)\{\w+\}(?!\})
于 2013-05-22T01:48:25.663 に答える
1

説明

これを試してみてください。これには、開き括弧と閉じ括弧を 1 つにする必要があります。二重括弧は無視されます。

このパーマリンクの例も参照してください

[^{][{]([^}]*)[}][^}]

ここに画像の説明を入力

c# の例

using System;
using System.Text.RegularExpressions;
namespace myapp
{
  class Class1
    {
      static void Main(string[] args)
        {
          String sourcestring = "A cat in a {{hat}} doesn't bite {back}.";
          Regex re = new Regex(@"[^{][{]([^}]*)[}][^}]");
          MatchCollection mc = re.Matches(sourcestring);
          int mIdx=0;
          foreach (Match m in mc)
           {
            for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
              {
                Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
              }
            mIdx++;
          }
        }
    }
}

$matches Array:
(
    [0] => Array
        (
            [0] =>  {back}.
        )

    [1] => Array
        (
            [0] => back
        )

)
于 2013-05-22T01:46:11.927 に答える
1

答えは、使用している正規表現パーサーによって若干異なりますが、おそらく次のようなものが必要です。

(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$

"{" 以外 (一致の一部ではない) の後に "{" (キャプチャ) が続き、"}" 以外のすべての文字 (キャプチャの終了) の後に "}" が続く、または...

「{」の後に「{」(キャプチャ)「}」以外のすべての文字(キャプチャの終了)の後に「}」以外(一致の一部ではない)が続く、または...

行頭の後に "{" (キャプチャ) が続き、"}" 以外のすべての文字 (キャプチャの終了) の後に行末が続きます

一部のパーサーは「?:」演算子を認識しない可能性があり、一部のパーサーは次の文字の一部またはすべて (「[]」内にない場合) をバックスラッシュでエスケープする必要があることに注意してください。

于 2013-05-22T01:46:49.857 に答える
0

Regexヘルパーを使用しただけで、それほど難しくありません:

(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$
于 2013-05-22T01:54:27.237 に答える