2016-08-18 74 views
0

我需要识别字符串中的以下模式。 “2N”:“2N”:“2N” - “2N” - “2N” - “2N” - “2N”/'2N'/'2N“ - ”2N“ 2N” 等等.....模式匹配BASIC编程语言和Universe数据库

基本上我想这个模式,如果写成简单的语言 2号码[:/ - 2个号码[:/ - 2个号码

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

回答

1

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

OK = X MATCH “2N1X2N1X2N” 和X [3,1] = X [6,1]和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行,实际上寻找在源/测试串卡号模式。

+0

嘿嘿谢谢回答这可能是工作......但这里的字符串,对此我比较没有目标字符串,字符串是这样的“评论评论sdgsghsdgsjk”信用卡号码'eghsgkjnhgks“。字符串就像评论,并在这些评论之间,我必须找到信用卡号码,所以它不可能找到确切的位置,所以我们不能使用索引 –

+0

heyy可以工作thanx代码.....我一定会使用逻辑在我的代码...... –

+0

如果这解决了你的问题,也许你可能会考虑'接受'这个答案? – stope19

0

不完美,但如何2N1X2N1X2N这让你2号码后跟1任何字符后跟2个数字等

+0

谢谢回答...亚这可能是工作 –

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