Supponi di avere una stringa (ad esempio needle
). Le sue 19 sottostringhe continue sono:Trovare una stringa * e * le sottostringhe in un pagliaio
needle
needl eedle
need eedl edle
nee eed edl dle
ne ee ed dl le
n e d l
Se dovessi costruire una regex per abbinare, in un pagliaio, una qualsiasi delle stringhe si potrebbe semplicemente fare:
/(needle|needl|eedle|need|eedl|edle|nee|eed|edl|dle|ne|ee|ed|dl|le|n|e|d|l)/
ma non sembra davvero elegante. Esiste un modo migliore per creare un'espressione regolare che abbinerà avidamente qualsiasi sottostringa di una determinata stringa?
Inoltre, se ponessi un altro vincolo, volevo abbinare solo sottostringhe più lunghe di una soglia, ad es. per sottostringhe di almeno 3 caratteri:
/(needle|needl|eedle|need|eedl|edle|nee|eed|edl|dle)/
nota: ho deliberatamente non menzionato alcun dialetto regex particolare. Si prega di indicare quale si sta utilizzando nella risposta.
Questo sembra molto simile al problema della sottostringa comune più lunga (http://en.wikipedia.org/wiki/Longest_common_substring_problem). Ha bisogno di essere regexp? – dasblinkenlight
La lunghezza dell'ago sarà sicuramente di ordine di grandezza inferiore a quella del pagliaio. Inoltre, sono interessato a sapere quante occorrenze di una qualsiasi delle sottostringhe dell'ago appaiono nel pagliaio, non quale sia la LCS. – CAFxX
non penso che la domanda molto più semplice (http://stackoverflow.com/questions/9114402/regexp-finding-longest-common-prefix-of-two-strings) abbia una soluzione facile usando una regexp quindi probabilmente dovresti essere più specifico su ciò di cui hai veramente bisogno. Possiamo generare regexp in modo programmatico? Deos ha bisogno di essere regexp? – gorn