Making a rectangular label for RegionPlot

Perhaps a "quick" appoach (in addition to looking at hyperlink of @rm-rf):

msp[f_, {xmin_, xmax_}, {ymin_, ymax_}, mfun_, mnum_, swatchsize_, 
  opts : OptionsPattern[]] := Module[{pm, swl},
  pm = RegionPlot[x < 1, {x, 0, 1}, {y, 0, 1}, MeshFunctions -> mfun, 
    Mesh -> IntegerPart@(mnum/(swatchsize/10)), Frame -> False, 
    PlotRange -> {{0, 1}, {0, 1}}, 
    Evaluate@FilterRules[{opts}, Options[RegionPlot]], 
    ImageSize -> swatchsize];
  swl = SwatchLegend["Expressions", LegendMarkers -> pm, 
    LegendMarkerSize -> swatchsize];
  RegionPlot[f, {x, xmin, xmax}, {y, ymin, ymax}, 
   MeshFunctions -> mfun, Mesh -> mnum, 
   Evaluate@FilterRules[{opts}, Options[RegionPlot]], 
   PlotLegends -> swl]]

Some examples:

msp[x^2 + y^3 < 2, {-2, 2}, {-2, 2}, {#1 &, #2 &}, 50, 50]

enter image description here

msp[x^2 + y^3 < 2, {-2, 2}, {-2, 2}, {#1 + #2 &, #1 - #2 &}, 50, 50]

enter image description here

msp[x^2 + y^3 < 2, {-2, 2}, {-2, 2}, {#1 &, #2 &}, 50, 50, 
 PlotStyle -> Yellow, BoundaryStyle -> {Thick, Purple}]

enter image description here

UPDATE

mspmod[f_, {xmin_, xmax_}, {ymin_, ymax_}, mfun_, mnum_, swatchsize_, 
  col_, opts : OptionsPattern[]] := 
 Module[{pm, swl}, 
  pm = RegionPlot[x < 1, {x, 0, 1}, {y, 0, 1}, MeshFunctions -> mfun, 
      Mesh -> IntegerPart@(mnum/(swatchsize/10)), Frame -> False, 
      PlotRange -> {{0, 1}, {0, 1}}, PlotStyle -> #, 
      Evaluate@FilterRules[{opts}, Options[RegionPlot]], 
      ImageSize -> swatchsize] & /@ col;
  swl = SwatchLegend["Expressions", LegendMarkers -> pm, 
    LegendMarkerSize -> swatchsize];
  RegionPlot[f, {x, xmin, xmax}, {y, ymin, ymax}, 
   MeshFunctions -> mfun, Mesh -> mnum, PlotStyle -> col, 
   Evaluate@FilterRules[{opts}, Options[RegionPlot]], 
   PlotLegends -> swl]]

Example:

mspmod[{x^3 - y^2 > 2, x^2 + y^3 > 3, 
  x^3 - y^2 > 2 && x^2 + y^3 > 3}, {-3, 3}, {-3, 3}, 50, 50, {Red, 
  Green, Yellow}]

enter image description here


You can also create hatched images (say, img) using ParametricPlot and use them with PlotStyle -> Texture[img] in RegionPlot:

Reusing the function hatchF from this answer:

ClearAll[hatchF]
hatchF[mf_List: {# &, #2 &}, mesh_List: {50, 50}, 
  style_: GrayLevel[.5], opts : OptionsPattern[]] := 
 ParametricPlot[{x, y}, {x, 0, 1}, {y, 0, 1}, Mesh -> mesh, 
  MeshFunctions -> mf, MeshStyle -> style, BoundaryStyle -> None, 
  opts, Frame -> False, PlotRangePadding -> 0, ImagePadding -> 0, Axes -> False]

t1a = hatchF[{# - #2 &}, {60}, Red, PlotStyle -> Opacity[.5, Yellow]];
t1b = hatchF[{# + #2 &}, {60}, Purple, PlotStyle -> Opacity[.5, Cyan]];
t2a = hatchF[{# + #2 &}, {80}, None, MeshShading -> {None, Blue}];
t2b = hatchF[{# - #2 &}, {80}, None, MeshShading -> {Red, None}];
t3 = ExampleData[{"TestImage", "Lena"}];
t4 = ImageCrop[ExampleData[{"ColorTexture", "Metal4"}], {600, 600}];
Grid[Transpose@Partition[{t1a, t1b, t2a, t2b, t3, t4}, 2]]

enter image description here

funcs = {Abs[x^3 - y^2] > 2, x^2 + y^3 < 1/2};
labels = Append[TraditionalForm /@ #, TraditionalForm[And @@ #]] & @ funcs;
markers = Append[ImageCrop[#, 30] & /@ {t1a, t1b}, ImageCrop[Show[t1a, t1b], 30]];
legend = Grid[Transpose[{markers, labels}], Alignment -> Left];

Legended[#, legend] &@
 RegionPlot[funcs, {x, -2, 2}, {y, -2, 2}, 
  PlotStyle -> {{Opacity[.5], Texture @ t1a}, {Opacity[.5], Texture @ t1b}}]

enter image description here

In versions 11.0+, use

  PlotStyle -> {Texture @ SetAlphaChannel[t1a, .5], Texture @ SetAlphaChannel[t1b, .5]}

Use t2a and t2b in places of t1a and t1b to get:

enter image description here

Use t3 in place of t2 and

 markers = Append[ImageCrop[#, 30] & /@ {t2a, ImageResize[t3, {50, 50}]}, 
   ImageCrop[Show[SetAlphaChannel[ImageResize[t3, {50, 50}], .9], 
     SetAlphaChannel[t2a, .3]], 30]];

to get

enter image description here

Replace t3 with t4 to get

enter image description here