Now you have two problems.
Vous devez réfléchir sérieusement à l'ensemble des chaînes possibles et quelle est l'expression régulière «correcte» pour chaque paire d'entrées. Je sais que cela vous semble évident en ce moment, mais convaincre votre algorithme de faire ce que vous attendez pourrait être plus difficile que vous ne le pensez. Un petit TDD est toujours une bonne idée: essayez de penser à des cas pathologiques.
Dans votre exemple, pourquoi il ne devrait pas générer quelque chose comme l'un de ceux-ci, au lieu de votre suggestion (voir @ réponse de M42 pour la première) ?:
111(...)222
111(...*)222
111(...+)222
111(..*)222
111(...?)222
(.*)111(.*)222(.*)
etc.
Que voulez-vous arriver si la troisième chaîne est l'un d'entre eux? Ou le second?
1111zzz222
111zzz2222
0111zzz222
111zzz2223
111zzzz222
111zz222
11zzz222
111zzz22
111zzz
zzz222
111xyz222
1z1z1z222
111222
1111222
1112222
etc.
Si (comme je le soupçonne) vous savez déjà que certains de ces cas vont être impossible, alors vous savez déjà plus sur la structure possible des chaînes que vous laisser sur. Et si c'est le cas, vous devriez probablement juste analyser les ficelles et l'avoir fait.
Si vous voulez vraiment vraiment essayer de toute façon, alors la première chose à savoir est si vous voulez faire correspondre "longest common subsequence" ou une variation de "longest common substring".
Si vous avez vraiment êtes courir ce contre des chaînes arbitraires, alors une fois que vous pensez que vous avez un bon algorithme, assurez-vous de le tester contre beaucoup des données d'échantillon (qui devrait être assez facile de générer ...
Voyons voir si je comprends cela. Vous voulez garder la partie "statique" de la chaîne, quelque chose qui est égal dans les chaînes précédentes, l'utiliser pour localiser ce qui est différent via une regex? – Anders
oui, c'est correct. Je voudrais générer un modèle à partir des 2 chaînes d'entrée et l'utiliser pour extraire (ou localiser) les différences dans la 3ème chaîne – defoo
111 (. *) 222 devrait probablement être 111 (. *?) 222. Il serait utile que vous fournissiez des exemples un peu plus réels que ceux-ci et expliquiez le contexte de votre demande. Qu'essayez-vous de faire? – Sylverdrag