2013-03-12 3 views
0

У меня есть список выражений, которые я хотел бы проверить и извлечь определенные части.
Эти выражения могут иметь любую комбинацию:Извлечение ТОЛЬКО определенных частей выражения регулярного выражения '

  • Строковые литералы (возможно, избежали, но не обязательно), обозначаемая одинарными кавычками
  • Любое количество символов , которые не являются строковые литералы и
    НЕ линейный символ конца, обозначенный точкой с запятой

Допустимые выражения бы начать после двоеточия, и заканчиваться точкой с запятой.
Примером действительного выражения будет:

: This is an *expression* 'with' and 'without \'escaped\' string literals', 
which ends with a semicolon!; 

И из этого выражения, я хотел бы выделить:

  • This is an *expression*
  • 'with'
  • and
  • 'without \'escaped\' string literals'
  • , which ends with a semicolon!

Возможно ли это?

+0

Можете ли вы предоставить более достоверные примеры наряду с ожидаемым поведением вывода? Или лучшее описание того, что определяет границы каждого фрагмента, который вы хотите извлечь? – uptownnickbrown

+0

Привет. Пожалуйста, просмотрите раздел ** Обновление ** в разделе [ЭТОТ вопрос] (http://stackoverflow.com/questions/15351153/using-c11-regex-to-capture-the-contents-of-a-context-free- грамматический файл), если вы хотите получить дополнительную информацию. Я задал этот вопрос, потому что он постепенно менялся со временем и больше не соответствовал предыдущему содержанию вопроса в этой ссылке. – RectangleEquals

+0

Я в основном хочу извлечь что-нибудь и все между двоеточием и точкой с запятой (за исключением ведущего и конечного пробела), но отдельные строковые литералы из всего остального, и все это сгруппировано в зависимости от того, является ли это строковым литералом или нет. – RectangleEquals

ответ

1

Говорилось, что RectangleEquals отвечает: std :: regex re _ ("'(?: \\. | [^']) * '| [^'] +");

+0

На самом деле это 'std :: regex re _ (« '(?: \\\\. | [^']) * '| [^'] + ");', Поскольку мы имеем его внутри самого строкового литерала. – RectangleEquals

+0

Для полноты: для совместимости с flex/DFA это действительно должно быть 'std :: regex re _ (" '(?: \\\\. | [^ \\\\']) * '| [^'] + "); ', хотя это не имеет значения в режиме ECMA по умолчанию, как показано здесь. – 2017-10-02 17:41:00