import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^\\s*(?:template\\s*<\\w+>\\s+)?(?:(const|mutable|static|friend|unsigned)\\s+)*\\w+(::\\w+)?(<([\\w<> *&,()]|::)+>)?(,?\\s+\\*?\\w+( = (-?\\d+(\\.\\d+)?|((QMap|QList)<[^()]+>\\(\\))|(\\w+::)*\\w+(\\([^()]+\\))?)|\\[\\d+\\])?)+;";
final String string = " FilterType mFilter = FilterNone;\n"
+ " QgsRectangle mFilterRect;\n"
+ " QgsFeatureId mFilterFid = -1;\n"
+ " QgsFeatureIds mFilterFids;\n"
+ " std::unique_ptr< QgsExpression > mFilterExpression;\n"
+ " QgsExpressionContext mExpressionContext;\n"
+ " Flags mFlags;\n"
+ " QgsAttributeList mAttrs;\n"
+ " QgsSimplifyMethod mSimplifyMethod;\n"
+ " long mLimit = -1;\n"
+ " OrderBy mOrderBy;\n"
+ " InvalidGeometryCheck mInvalidGeometryFilter = GeometryNoCheck;\n"
+ " std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;\n"
+ "static QHash<QString, Help> sFunctionHelpTexts;\n"
+ "friend class QgsOgcUtils;\n"
+ "template<typename> friend class QgsAbstractFeatureIteratorFromSource;\n"
+ "const QgsAbstractGeometry *mGeometry = 0;\n"
+ "mutable unsigned char *mP;\n"
+ "QgsPoint mEdgePoints[2];\n"
+ "double xxxx, yyyyy;\n\n"
+ "QgsProviderRegistry::WidgetMode mWidgetMode = QgsProviderRegistry::WidgetMode::None;\n\n"
+ " \n"
+ "QMap<QTreeWidgetItem *, QPair<QBrush, QBrush>> mTreeInitialStyle = QMap<QTreeWidgetItem *, QPair<QBrush, QBrush>>();\n"
+ " QMap<QTreeWidgetItem *, bool> mTreeInitialExpand = QMap<QTreeWidgetItem *, bool>();\n"
+ "QList<x> myList = QList<x>();\n\n\n"
+ "SHOULD NOT MATCH\n"
+ "virtual bool filterAcceptsRow( int row, const QModelIndex &source_parent ) const;";
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