Regex для получения строки между фигурными скобками “{я хочу то, что между фигурными скобками}”

Общие формы копирования elision

Для технического обзора - пропустить этот ответ .

Для менее технического вида & amp; введение - пропустить этот ответ .

(Именован) Оптимизация возвращаемого значения является распространенной формой копирования. Это относится к ситуации, когда объект, возвращаемый значением из метода, имеет свою копию. Пример, приведенный в стандарте, иллюстрирует именованную оптимизацию возвращаемого значения, так как объект назван.

class Thing {
public:
  Thing();
  ~Thing();
  Thing(const Thing&);
};
Thing f() {
  Thing t;
  return t;
}
Thing t2 = f();

Оптимизация регулярного значения возвращается, когда возвращается время:

class Thing {
public:
  Thing();
  ~Thing();
  Thing(const Thing&);
};
Thing f() {
  return Thing();
}
Thing t2 = f();

Другие распространенные места, где происходит копирование, - это когда время передается по значению:

class Thing {
public:
  Thing();
  ~Thing();
  Thing(const Thing&);
};
void foo(Thing t);

foo(Thing());

или когда исключение выбрано и поймано по значению:

struct Thing{
  Thing();
  Thing(const Thing&);
};

void foo() {
  Thing c;
  throw c;
}

int main() {
  try {
    foo();
  }
  catch(Thing c) {  
  }             
}

Общие ограничения для копирования:

  • множественные точки возврата
  • условная инициализация

Большинство компиляторов коммерческого уровня поддерживают copy elision & amp; (N) RVO (в зависимости от настроек оптимизации).

105
задан Community 23 May 2017 в 12:02
поделиться

4 ответа

Если Ваша строка будет всегда иметь тот формат, regex является излишеством:

>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
35
ответ дан Kev 24 November 2019 в 03:53
поделиться

Попробуйте

/{(.*?)}/

, Который означает, соответствуйте какому-либо символу между {и}, но не будьте жадными - соответствуют самой короткой строке, которая заканчивается} (? остановки * быть жадным). Круглые скобки позволяют Вам извлечь подобранную часть.

Иначе был бы

/{([^}]*)}/

, Это соответствует любому символу кроме} символ (другой способ того, чтобы не быть жадным)

240
ответ дан Paul Dixon 24 November 2019 в 03:53
поделиться
/\{([^}]+)\}/

/        - delimiter
\{       - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
(        - start capturing
[^}]     - character class consisting of
    ^    - not
    }    - a closing brace (no escaping necessary because special characters in a character class are different)
+        - one or more of the character class
)        - end capturing
\}       - the closing literal brace
/        - delimiter
146
ответ дан meouw 24 November 2019 в 03:53
поделиться

Этот работает в Textmate и соответствует всему в файле CSS между фигурными скобками.

\{(\s*?.*?)*?\}

selector {. . совпадения здесь включая пустое пространство. . .}

Если вы хотите в дальнейшем иметь возможность возвращать содержимое, заключите все это в еще один набор круглых скобок, например:

\{((\s*?.*?)*?)\}

, и вы сможете получить доступ к содержимому через $ 1.

Это также работает для функций, но Я не тестировал его с вложенными фигурными скобками.

14
ответ дан 24 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: