// match2 matches multiple "*" (matches a single token) wildcards and zero or one "..." wildcards (matches multiple tokens) static S[] match2(L<S> pat, L<S> tok) { // standard case (no ...) int i = pat.indexOf("..."); if (i < 0) return match2_match(pat, tok); pat = new ArrayList<S>(pat); // We're modifying it, so copy first pat.set(i, "*"); while (pat.size() < tok.size()) { pat.add(i, "*"); pat.add(i+1, ""); // doesn't matter } return match2_match(pat, tok); } static S[] match2_match(L<S> pat, L<S> tok) { L<S> result = new ArrayList<S>(); if (pat.size() != tok.size()) { ifdef match2_debug print("match2: Size mismatch: " + structure(pat) + " vs " + structure(tok)); endifdef return null; } for (int i = 1; i < pat.size(); i += 2) { S p = pat.get(i), t = tok.get(i); ifdef match2_debug print("match2: Checking " + p + " against " + t); endifdef if (eq(p, "*")) result.add(t); else if (!equalsIgnoreCase(unquote(p), unquote(t))) // bold change - match quoted and unquoted now. TODO: should remove return null; } return result.toArray(new S[result.size()]); }
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1000812 |
Snippet name: | match2 function |
Eternal ID of this version: | #1000812/3 |
Text MD5: | 0b0758a39429d9a2d40ff1a52eb19724 |
Author: | stefan |
Category: | |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-03-09 20:00:50 |
Source code size: | 1201 bytes / 37 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 874 / 7700 |
Version history: | 2 change(s) |
Referenced in: | #1001234 - find2 function #1002427 - Accellerating 629 (SPIKE) #1006654 - Standard functions list 2 (LIVE, continuation of #761) #1017132 - match2x #3000382 - Answer for ferdie (>> t = 1, f = 0) #3000383 - Answer for funkoverflow (>> t=1, f=0 okay) |