$re = '/\b(class|struct)\s+([A-Za-z_]\w*)\s*(:?\s*(public|private|protected)?\s+([A-Za-z_]+))?\s*{(?Us:.*)}\s*;/m';
$str = '.*(class|struct)\\s+([^{]+)\\s*[:]?([^{]+){
\\b(class|struct)\\s+[A-Za-z_]\\s*\\{
#ifndef STUDENTMODEL_H
#define STUDENTMODEL_H
#include <QAbstractTableModel>v
#include <QList>
class
S : private _jgkdfjgkdlf {};
struct Student {
public:
int id;
QString fio;
QString group;
QString shifr;
double average;
};
class StudentModel
: public QAbstractTableModel
{
Q_OBJECT
public:
explicit StudentModel(QObject* parent = nullptr);
Qt::ItemFlags flags(const QModelIndex& index) const override;
// basic functionality
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
// editable model
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
bool insertRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;
bool removeRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;
void resetData(const QList<Student>& newData);
void readFile(const QString& path);
void writeFile(const QString& path);
private:
QList<Student> _studentData;
};
#endif // STUDENTMODEL_H
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php