code_junkie

How can I make my regex match the first pattern instead of the last?

Nov 11th, 2011
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. # my regexp matches from the bottom to the top but I'd like it to replace from the top down
  2. local $/=undef;
  3. my $DataToParse = <DATA>;
  4. my $item = "SeaMonkeys";
  5. my $catNum = "SMKY-1978";
  6. my $maxInstancesToReplace = 2;
  7. parseData();
  8. exit();
  9.  
  10. sub parseData {
  11. for (my $counter = 0; $counter < $maxInstancesToReplace; $counter++) {
  12. # Stick in a temporary text placeholder that I will replace later after more processing
  13. $DataToParse =~ s/(.+)sELEMENTs(.+?)s(Item := "$item".+?CatalogNumber := "$catNum.+?END_ELEMENT(.+)/$1 ***** Found $2's $catNum $item. (counter: $counter) *****$3/s;
  14. }
  15. print("Here's the result:n$DataToParsen");
  16. }
  17.  
  18. __DATA__
  19. ELEMENT Kurt (Item := "BrightLite",
  20. ItemID := 29,
  21. CatalogNumber := "BTLT-9274",
  22. Vendor := 100,
  23. END_ELEMENT
  24.  
  25. ELEMENT Mick (Item := "PetRock",
  26. ItemID := 36,
  27. CatalogNumber := "PTRK-3475/A",
  28. Vendor := 82,
  29. END_ELEMENT
  30.  
  31. ELEMENT Kurt (Item := "SeaMonkeys",
  32. ItemID := 12,
  33. CatalogNumber := "SMKY-1978/E",
  34. Vendor := 77,
  35. END_ELEMENT
  36.  
  37. ELEMENT Joe (Item := "Pong",
  38. ItemID := 24,
  39. CatalogNumber := "PONG-1482",
  40. Vendor := 5,
  41. END_ELEMENT
  42.  
  43. ELEMENT Shane (Item := "SeaMonkeys",
  44. ItemID := 1032,
  45. CatalogNumber := "SMKY-1978/E",
  46. Vendor := 77,
  47. END_ELEMENT
  48.  
  49. ELEMENT Kurt (Item := "Battleship",
  50. ItemID := 99,
  51. CatalogNumber := "BTLS-5234",
  52. Vendor := 529,
  53. END_ELEMENT
  54.  
  55. ELEMENT Mick (Item := "SeaMonkeys",
  56. ItemID := 8,
  57. CatalogNumber := "SMKY-1978/F",
  58. Vendor := 77,
  59. END_ELEMENT
  60.  
  61. ELEMENT Frank (Item := "PetRock",
  62. ItemID := 42,
  63. CatalogNumber := "PTRK-3475/B",
  64. Vendor := 82,
  65. END_ELEMENT
  66.  
  67. ELEMENT Joe (Item := "SeaMonkeys",
  68. ItemID := 8,
  69. CatalogNumber := "SMKY-1979/A",
  70. Vendor := 77,
  71. END_ELEMENT
  72.  
  73. my $re=qr/sELEMENTs(.+?)s(Item := "$item".+?CatalogNumber := "$catNum.+?END_ELEMENT/;
  74.  
  75. my $re=qr/sELEMENTs(.+?)s(Item := "$item".+?CatalogNumber := "$catNum.+?END_ELEMENT/;
  76.  
  77. sub parseData {
  78. my $re=qr/sELEMENTs(.+?)s(Item := "$item".+?CatalogNumber := "$catNum.+?END_ELEMENT(.+)/;
  79. foreach my $counter (0..$maxInstancesToReplace) {
  80. # Stick in a temporary text placeholder that I will replace later after more processing
  81. $DataToParse =~ s/$re/ ***** Found $1's $catNum $item. (counter: $counter) *****$2/s;
  82. }
  83. print("Here's the result:n$DataToParsen");
  84. }
Add Comment
Please, Sign In to add comment