StringScanner.pm
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. package Utils::StringScanner;
  2. use strict;
  3. use warnings;
  4. sub new {
  5. my ($class, $string) = @_;
  6. my %self = (str => $string);
  7. return bless %self, $class;
  8. }
  9. sub scan {
  10. my ($self, $regex) = @_;
  11. if (ref($regex) ne 'Regexp') {
  12. $regex = quotemeta $regex;
  13. }
  14. if ($self->{str} =~ /^$regex/sx) {
  15. return substr($self->{str}, 0, $+[0], '');
  16. } else {
  17. return;
  18. }
  19. }
  20. sub scanUntil {
  21. my ($self, $regex) = @_;
  22. if (ref($regex) ne 'Regexp') {
  23. $regex = quotemeta $regex;
  24. }
  25. if ($self->{str} =~ /$regex/sx) {
  26. return substr($self->{str}, 0, $-[0], '');
  27. } else {
  28. return;
  29. }
  30. }
  31. sub peek {
  32. my ($self, $regex) = @_;
  33. if (ref($regex) ne 'Regexp') {
  34. $regex = quotemeta $regex;
  35. }
  36. if ($self->{str} =~ /^$regex/sx) {
  37. return substr($self->{str}, 0, $+[0]);
  38. } else {
  39. return;
  40. }
  41. }
  42. sub peekUntil {
  43. my ($self, $regex) = @_;
  44. if (ref($regex) ne 'Regexp') {
  45. $regex = quotemeta $regex;
  46. }
  47. if ($self->{str} =~ /$regex/sx) {
  48. return substr($self->{str}, 0, $-[0]);
  49. } else {
  50. return;
  51. }
  52. }
  53. sub skip {
  54. my ($self, $regex) = @_;
  55. if (ref($regex) ne 'Regexp') {
  56. $regex = quotemeta $regex;
  57. }
  58. if ($self->{str} =~ /^$regex/sx) {
  59. substr($self->{str}, 0, $+[0], '');
  60. return $+[0];
  61. } else {
  62. return;
  63. }
  64. }
  65. sub skipUntil {
  66. my ($self, $regex) = @_;
  67. if (ref($regex) ne 'Regexp') {
  68. $regex = quotemeta $regex;
  69. }
  70. if ($self->{str} =~ /$regex/sx) {
  71. substr($self->{str}, 0, $-[0], '');
  72. return $+[0];
  73. } else {
  74. return;
  75. }
  76. }
  77. sub rest {
  78. my ($self) = @_;
  79. return $self->{str};
  80. }
  81. sub terminate {
  82. $_[0]->{str} = '';
  83. }
  84. sub eos {
  85. my ($self) = @_;
  86. return length($self->{str}) == 0;
  87. }
  88. 1;