模式匹配 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
我需要识别字符串中的以下模式。 - "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