Не без производить все возможные исходы определенного Grammar, некоторые из которых бесконечно. Это означает, что в общем случае невозможно найти нужную грамматику из заданного набора входных данных. Даже в ваших случаях вам нужно дать все возможное производство грамматики (регулярное выражение), чтобы точно знать, какое регулярное выражение вы хотите найти. Например, в первом наборе имеется несколько регулярных выражений, которые могут соответствовать этому: некоторые из них могут быть:
abc[0-9][0-9][0-9]
abc[1-2][0-5][2-3]
abc[1-2][0-5][2-3]a*
abc\d*
abc\d+
abc\d+a*b*c*
...
И так далее. При этом вы можете найти грамматику a, которая соответствует установленным условиям. Один из способов - просто скопировать сходства и различия в каждом элементе ввода. Таким образом, чтобы сделать это с помощью второго примера:
ab
часть одинакова для всех из них, поэтому мы начнем с ab
как регулярное выражение. Тогда следующий символ может быть a, b or c
, поэтому мы можем сказать (a|b|c)
. Затем 1 or empty
три раза. Это приведет к:
ab(a|b|c)(1|)(1|)(1|)
Это правильное регулярное выражение, но, возможно, не тот, который вы хотели.
Почему 'а \ d \ d \ d' и не' а (?: 123 | 212) '? – Mariano
Проверьте [text2re] (http://www.txt2re.com/), как предложено в http://stackoverflow.com/questions/6219790/need-a-regex-tool-that-suggests-expressions-based-on- selected-text – Mariano