qthelp_regex.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include "base/flags.h"
  9. #include <QtCore/QRegularExpression>
  10. namespace qthelp {
  11. class RegularExpressionMatch {
  12. public:
  13. RegularExpressionMatch(const QRegularExpressionMatch &other) = delete;
  14. RegularExpressionMatch(const RegularExpressionMatch &other) = delete;
  15. RegularExpressionMatch(QRegularExpressionMatch &&match) : data_(std::move(match)) {
  16. }
  17. RegularExpressionMatch(RegularExpressionMatch &&other) : data_(std::move(other.data_)) {
  18. }
  19. RegularExpressionMatch &operator=(const QRegularExpressionMatch &match) = delete;
  20. RegularExpressionMatch &operator=(const RegularExpressionMatch &other) = delete;
  21. RegularExpressionMatch &operator=(QRegularExpressionMatch &&match) {
  22. data_ = std::move(match);
  23. return *this;
  24. }
  25. RegularExpressionMatch &operator=(RegularExpressionMatch &&other) {
  26. data_ = std::move(other.data_);
  27. return *this;
  28. }
  29. QRegularExpressionMatch *operator->() {
  30. return &data_;
  31. }
  32. const QRegularExpressionMatch *operator->() const {
  33. return &data_;
  34. }
  35. bool valid() const {
  36. return data_.hasMatch();
  37. }
  38. explicit operator bool() const {
  39. return valid();
  40. }
  41. private:
  42. QRegularExpressionMatch data_;
  43. };
  44. enum class RegExOption {
  45. None = QRegularExpression::NoPatternOption,
  46. CaseInsensitive = QRegularExpression::CaseInsensitiveOption,
  47. DotMatchesEverything = QRegularExpression::DotMatchesEverythingOption,
  48. Multiline = QRegularExpression::MultilineOption,
  49. ExtendedSyntax = QRegularExpression::ExtendedPatternSyntaxOption,
  50. InvertedGreediness = QRegularExpression::InvertedGreedinessOption,
  51. DontCapture = QRegularExpression::DontCaptureOption,
  52. UseUnicodeProperties = QRegularExpression::UseUnicodePropertiesOption,
  53. };
  54. using RegExOptions = base::flags<RegExOption>;
  55. inline constexpr auto is_flag_type(RegExOption) { return true; };
  56. inline RegularExpressionMatch regex_match(const QString &string, const QString &subject, RegExOptions options = 0) {
  57. auto qtOptions = QRegularExpression::PatternOptions(static_cast<int>(options));
  58. return RegularExpressionMatch(QRegularExpression(string, qtOptions).match(subject));
  59. }
  60. inline RegularExpressionMatch regex_match(const QString &string, QStringView subjectView, RegExOptions options = 0) {
  61. auto qtOptions = QRegularExpression::PatternOptions(static_cast<int>(options));
  62. return RegularExpressionMatch(QRegularExpression(string, qtOptions).match(subjectView));
  63. }
  64. } // namespace qthelp