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

Pattern Matching BASIC programming Language and Universe Database

我需要识别字符串中的以下模式。 - "2N':'2N':'2N" - "2N'-'2N'-'2N" - “2N”/“2N”/“2N” - "2N'/'2N'-'2N" 等等......

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

那么,我是否可以编写一个涵盖所有可能场景的模式?否则我必须编写总共 9 个模式,并且必须将所有 9 个模式与字符串匹配....这不是我代码中的情况,我必须匹配 4、2 个由 [: / -] 分隔的数字数字到字符串为此,我必须编写总共 27 种模式。所以为了理解目的,我采用了 3 ,2 位数的场景...... 请帮助我...谢谢

不是很完美,但是 2N1X2N1X2N 怎么样,这会让你得到 2 个数字,然后是 1 个任意字符,然后是 2 个数字等。

也许你可以试试(选择 R83 样式)

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

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

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

这似乎将所有需要的验证都放在了一个语句中。我假设非数字字符必须相同。如果这不是真的,检查可以更改为类似:

确定 = X 匹配“2N1X2N1X2N”和索引(“:/-”,X[3,1],1) > 0 和索引(“:/-”,X[6,1],1) > 0

好的,我想周围字符的要求对我来说并不明显。尽管如此,它并没有让它变得更难。您只需要 'parse' 字符串在输入字符串中寻找第一个(我假设)这样的模式(如果有的话)。这可以在几行代码中完成。这是一个(未经测试的)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 行实际在 source/test 字符串中查找卡号模式。

这可能有帮助:

 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