我需要在字符串中识别以下模式。 - " 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位数的情节...... 请帮帮我......谢谢
答案 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