模式匹配BASIC编程语言和Universe数据库

时间:2016-08-18 05:35:41

标签: basic universe pick

我需要在字符串中识别以下模式。 - " 2N':' 2N':' 2N" - " 2N' - ' 2N' - ' 2N" - " 2N' /' 2N' /' 2N" - " 2N' /' 2N' - ' 2N" 这样......

基本上我想要这种模式,如果用简单语言编写  2 NUMBERS [:/ - ] 2 NUMBERS [:/ - ] 2 NUMBERS

无论如何,我可以编写一个涵盖所有可能场景的模式吗?或者我必须写总共9个模式,并且必须将所有9个模式匹配到字符串....并且它不是我的代码中的场景,我必须匹配由[:/ - ]分隔的4个,2个数字到字符串我有towrite共27种模式。所以为了理解目的,我采取了3位数的情节...... 请帮帮我......谢谢

3 个答案:

答案 0 :(得分:1)

也许你可以试试(Pick R83风格)

OK = X MATCH" 2N1X2N1X2N" AND X [3,1] = X [6,1] AND INDEX(":/ - ",X [3,1],1)> 0

其中变量X是某些输入字符串,如:12-34-56

如果验证通过,则应将变量OK设置为1,否则将0设置为任何无效格式。

这似乎可以将您所需的所有验证都集中到一个语句中。我假设非数字字符必须相同。如果不是这样,则可以将检查更改为:

OK = X MATCH" 2N1X2N1X2N" AND INDEX(":/ - ",X [3,1],1)> 0 AND INDEX(":/ - ",X [6,1],1)> 0

好吧,我猜周围人物的要求对我来说并不明显。不过,它并没有让它变得更难。你只需要解析'字符串在输入字符串中查找第一个(我假设)这样的模式(如果有的话)。这可以通过几行代码完成。这是一个(相当未经测试的)R83风格测试程序:

PROMPT ":"
LOOP
  LOOP
    CRT 'Enter test string':
    INPUT S
  WHILE S # "" AND LEN(S) < 8 DO
    CRT "Invalid input! Hit RETURN to exit, or enter a string with >= 8 chars!"
  REPEAT
UNTIL S = "" DO
  *
  * Look for 1st occurrence of pattern in string..
  CARDNUM = ""
  FOR I = 1 TO LEN(S)-7 WHILE CARDNUM = ""
    IF S[I,8] MATCH "2N1X2N1X2N" THEN
      IF INDEX(":/-",S[I+2,1],1) > 0 AND INDEX(":/-",S[I+5,1],1) > 0 THEN
        CARDNUM = S[I,8] ;* Found it!
      END ELSE I = I + 8
    END
  NEXT I
  *
  CRT CARDNUM
REPEAT

这里只有7或8行实际上在源/测试字符串中查找卡号模式。

答案 1 :(得分:0)

不太完美,但2N1X2N1X2N如何获得2个数字后跟1个任意字符后跟2个数字等。

答案 2 :(得分:0)

这可能会有所帮助:

 BIG.STRING  ="HELLO TILDE ~ CARD 12:34:56 IS IN THIS STRING"
 TEMP.STRING = BIG.STRING

 CONVERT "~:/-" TO "*~~~" IN TEMP.STRING           

 IF TEMP.STRING MATCHES '0X2N"~"2N"~"2N0X'  THEN

    FIRST.TILDE.POSN = INDEX(TEMP.STRING,"~",1)
    CARD.STRING      = BIG.STRING[FIRST.TILDE.POSN-2,8]
    PRINT CARD.STRING
 END