import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\b(class|struct)\\s+([A-Za-z_]\\w*)\\s*(:?\\s*(public|private|protected)?\\s+([A-Za-z_]+))?\\s*\\{(?Us:.*)\\}\\s*;";
final String string = ".*(class|struct)\\s+([^{]+)\\s*[:]?([^{]+){\n"
+ "\\b(class|struct)\\s+[A-Za-z_]\\s*\\{\n"
+ "#ifndef STUDENTMODEL_H\n"
+ "#define STUDENTMODEL_H\n\n"
+ "#include <QAbstractTableModel>v\n"
+ "#include <QList>\n\n"
+ "class\n"
+ "S : private _jgkdfjgkdlf {};\n\n"
+ "struct Student {\n"
+ "public:\n"
+ " int id;\n"
+ " QString fio;\n"
+ " QString group;\n"
+ " QString shifr;\n"
+ " double average;\n"
+ "};\n\n"
+ "class StudentModel \n"
+ ": public QAbstractTableModel\n"
+ "{\n"
+ " Q_OBJECT\n\n"
+ "public:\n"
+ " explicit StudentModel(QObject* parent = nullptr);\n\n"
+ " Qt::ItemFlags flags(const QModelIndex& index) const override;\n\n"
+ " // basic functionality\n"
+ " int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n"
+ " int columnCount(const QModelIndex& parent = QModelIndex()) const override;\n\n"
+ " QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n"
+ " QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;\n\n"
+ " // editable model\n"
+ " bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;\n\n"
+ " bool insertRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;\n"
+ " bool removeRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;\n\n"
+ " void resetData(const QList<Student>& newData);\n"
+ " void readFile(const QString& path);\n"
+ " void writeFile(const QString& path);\n\n"
+ "private:\n"
+ " QList<Student> _studentData;\n"
+ "};\n\n"
+ "#endif // STUDENTMODEL_H\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html