2016-08-18 54 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