⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perl5matcher.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
	  if((minLength > 0 || tmp) && 	     __tryExpression(expression, __currentOffset)) {	    success = true;	    break _mainLoop;	  }	  break;	case OpCode._NBOUND:	  if(minLength > 0) {	    ++dontTry;	    --endOffset;	  }	  if(__currentOffset != beginOffset) {	    ch = __input[__currentOffset - 1];	    tmp = OpCode._isWordCharacter(ch);	  } else	    tmp = OpCode._isWordCharacter(__previousChar);	  while(__currentOffset < endOffset) {	    ch = __input[__currentOffset];	    if(tmp != OpCode._isWordCharacter(ch))	      tmp = !tmp;	    else if(__tryExpression(expression, __currentOffset)) {	      success = true;	      break _mainLoop;	    }	    ++__currentOffset;	  }	  if((minLength > 0 || !tmp) &&	     __tryExpression(expression, __currentOffset)) {	    success = true;	    break _mainLoop;	  }	  break;	case OpCode._ALNUM:	  while(__currentOffset < endOffset) {	    ch = __input[__currentOffset];	    if(OpCode._isWordCharacter(ch)) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	case OpCode._NALNUM:	  while(__currentOffset < endOffset) {	    ch = __input[__currentOffset];	    if(!OpCode._isWordCharacter(ch)) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	case OpCode._SPACE:	  while(__currentOffset < endOffset) {	    if(Character.isWhitespace(__input[__currentOffset])) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	case OpCode._NSPACE:	  while(__currentOffset < endOffset) {	    if(!Character.isWhitespace(__input[__currentOffset])) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	case OpCode._DIGIT:	  while(__currentOffset < endOffset) {	    if(Character.isDigit(__input[__currentOffset])) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	case OpCode._NDIGIT:	  while(__currentOffset < endOffset) {	    if(!Character.isDigit(__input[__currentOffset])) {	      if(tmp && __tryExpression(expression, __currentOffset)) {		success = true;		break _mainLoop;	      } else		tmp = doEvery;	    } else	      tmp = true;	    ++__currentOffset;	  }	  break;	} // end switch      } else {	if(minLength > 0)	  dontTry = minLength - 1;	endOffset-=dontTry;	do {	  if(__tryExpression(expression, __currentOffset)) {	    success = true;	    break _mainLoop;	  }	} while(__currentOffset++ < endOffset);      }      break _mainLoop;    } // end while    __lastSuccess = success;    __lastMatchResult = null;    return success;  }  private boolean __tryExpression(Perl5Pattern expression, int offset) {    int count;    __inputOffset = offset;    __lastParen   = 0;    __expSize     = 0;    if(__numParentheses > 0) {      for(count=0; count <= __numParentheses; count++) {	__beginMatchOffsets[count] = OpCode._NULL_OFFSET;	__endMatchOffsets[count]   = OpCode._NULL_OFFSET;      }    }    if(__match(1)){      __beginMatchOffsets[0] = offset;      __endMatchOffsets[0]   = __inputOffset;      return true;    }    return false;  }      private int __repeat(int offset, int max) {    int scan, eol, operand, ret;    char ch;    scan = __inputOffset;    eol  = __eol;    if(max != Character.MAX_VALUE && max < eol - scan)      eol = scan + max;    operand = OpCode._getOperand(offset);    switch(__program[offset]) {    case OpCode._ANY:      while(scan < eol && __input[scan] != '\n')	++scan;      break;    case OpCode._SANY:      scan = eol;      break;    case OpCode._EXACTLY:      ++operand;      while(scan < eol && __program[operand] == __input[scan])	++scan;      break;    case OpCode._ANYOF:      if(scan < eol && (ch = __input[scan]) < 256) {	while((__program[operand + (ch >> 4)] & (1 << (ch & 0xf))) == 0) {	  if(++scan < eol)	    ch = __input[scan];	  else	    break;	}      }      break;    case OpCode._ALNUM:      while(scan < eol && OpCode._isWordCharacter(__input[scan]))	++scan;      break;    case OpCode._NALNUM:      while(scan < eol && !OpCode._isWordCharacter(__input[scan]))	++scan;      break;    case OpCode._SPACE:      while(scan < eol && Character.isWhitespace(__input[scan]))	++scan;      break;    case OpCode._NSPACE:      while(scan < eol && !Character.isWhitespace(__input[scan]))	++scan;      break;    case OpCode._DIGIT:      while(scan < eol && Character.isDigit(__input[scan]))	++scan;      break;    case OpCode._NDIGIT:      while(scan < eol && !Character.isDigit(__input[scan]))	++scan;      break;    default:      break;    }    ret = scan - __inputOffset;    __inputOffset = scan;    return ret;  }  private boolean __match(int offset) {    char nextChar, op;    int scan, next, input, maxScan, current, line, arg;    boolean inputRemains = true, minMod = false;    Perl5Repetition rep;    input    = __inputOffset;    inputRemains = (input < __endOffset);    nextChar = (inputRemains ? __input[input] : __EOS);    scan     = offset;    maxScan  = __program.length;    while(scan < maxScan /*&& scan > 0*/){      next = OpCode._getNext(__program, scan);      switch(op = __program[scan]) {      case OpCode._BOL:	if(input == __bol ? __previousChar == '\n' :	   (__multiline && (inputRemains || input < __eol) && 	    __input[input - 1] == '\n'))	  break;	return false;      case OpCode._MBOL:	if(input == __bol ? __previousChar == '\n' :	   ((inputRemains || input < __eol) && __input[input - 1] == '\n'))	  break;	return false;      case OpCode._SBOL:	if(input == __bol && __previousChar == '\n')	  break;	return false;      case OpCode._GBOL:	if(input == __bol)	  break;	return true;      case OpCode._EOL :	if((inputRemains || input < __eol) && nextChar != '\n')	  return false;	if(!__multiline && __eol - input > 1)	  return false;	break;      case OpCode._MEOL:	if((inputRemains || input < __eol) && nextChar != '\n')	  return false;	break;      case OpCode._SEOL:	if((inputRemains || input < __eol) && nextChar != '\n')	  return false;	if(__eol - input > 1)	  return false;	break;      case OpCode._SANY:	if(!inputRemains && input >= __eol)	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._ANY:	if((!inputRemains && input >= __eol) || nextChar == '\n')	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._EXACTLY:	current = OpCode._getOperand(scan);	line = __program[current++];	if(__program[current] != nextChar)	  return false;	if(__eol - input < line)	  return false;	if(line > 1 && !__compare(__program, current, __input, input, line))	  return false;	input+=line;	inputRemains = (input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._ANYOF:	current = OpCode._getOperand(scan);	if(nextChar == __EOS && inputRemains)	  nextChar = __input[input];	if(nextChar >= 256 || (__program[current + (nextChar >> 4)] &	    (1 << (nextChar & 0xf))) != 0)	  return false;	if(!inputRemains && input >= __eol)	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._ALNUM:	if(!inputRemains)	  return false;	if(!OpCode._isWordCharacter(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._NALNUM:	if(!inputRemains && input >= __eol)	  return false;	if(OpCode._isWordCharacter(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._NBOUND:      case OpCode._BOUND:	boolean a, b;	if(input == __bol)	  a = OpCode._isWordCharacter(__previousChar);	else	  a = OpCode._isWordCharacter(__input[input - 1]);	b = OpCode._isWordCharacter(nextChar);	if((a == b) == (__program[scan] == OpCode._BOUND))	  return false;	break;      case OpCode._SPACE:	if(!inputRemains && input >= __eol)	  return false;	if(!Character.isWhitespace(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._NSPACE:	if(!inputRemains)	  return false;	if(Character.isWhitespace(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._DIGIT:	if(!Character.isDigit(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._NDIGIT:	if(!inputRemains && input >= __eol)	  return false;	if(Character.isDigit(nextChar))	  return false;	inputRemains = (++input < __endOffset);	nextChar = (inputRemains ? __input[input] : __EOS);	break;      case OpCode._REF:	arg = OpCode._getArg1(__program, scan);	current = __beginMatchOffsets[arg];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -