Есть ли механизм для измерения или сравнения того, насколько жесткий шаблон соответствует данной строке? По шаблону я имею в виду регулярное выражение или что-то подобное. Например, у нас есть строка «foobar» и два регулярных выражения: «fooba». и ". *" Оба шаблона соответствуют строке. Можно ли определить, что «fooba». более подходящий шаблон для данной строки, затем «. *»?Измерение «соответствия»?
ответ
Есть метрики и эвристики для строки «расстояние». Проверьте это, например, http://en.wikipedia.org/wiki/Edit_distance
Вот одна случайная реализация Java, пришедшая с поиском Google.
http://www.merriampark.com/ldjava.htm
Некоторые показатели являются дорогостоящими, чтобы вычислить так осмотреться и найти тот, который соответствует вашим потребностям.
Что касается вашего конкретного примера, IIRC, согласование регулярных выражений в Java приоритеты терминов путем сопоставления длины, а затем порядок, так что если вы используете что-то вроде
«(Foobar) | (. *)», Это будет соответствовать первому один, и вы можете определить это, просмотрев результаты, возвращенные для двух групп захвата.
Как об этом для идеи: Используйте длину регулярного выражения: length("fooba.") > length(".*")
, так "fooba."
конкретнее ...
Однако, это зависит от того, где регулярных выражений берутся и как точно вы должны быть как "fo.*|.*ba"
будет длиннее "fooba."
, поэтому решение не всегда будет работать.
К сожалению, шаблоны, подобные «foob», «foo.», «Fo *.» обычно собираются вместе. В любом случае, благодарю вас за простой первый aproarch. – jekamax
Предположим, вы всегда можете удалить любые альфа-символы из регулярного выражения, прежде чем сравнивать длину. – beny23
... Или сделать некоторые эвристики для взвешивания специальных символов. Это может сработать. – jekamax
То, о чем вы просите, на самом деле не является свойством регулярных выражений.
Создайте перечисление, которое измеряет «близость», и создайте класс, который будет содержать заданное регулярное выражение, и значение близости. Это требует, чтобы вы определили, какое регулярное выражение считается «более близким», чем другое.
Создайте свои различные классы и отпустите их на свой код и сравните согласованные объекты, позволяя «самой близкой» подняться на вершину.
псевдо-код, фактически сравнивая что-нибудь, или похожий любой вменяемый язык:
enum Closeness
Exact
PrettyClose
Decent
NotSoClose
WayOff
CouldBeAnything
mune
class RegexCloser
property Closeness Close()
property String Regex()
ssalc
var foo = new RegexCloser(Closeness := Exact, Regex := "foobar")
var bar = new RegexCloser(Closeness := CouldBeAnything, Regex := ".*")
var target = "foobar";
if Regex.Match(target, foo)
print String.Format("foo {0}", foo.Closeness)
fi
if Regex.Match(target, bar)
print String.Format("bar {0}", bar.Closeness)
fi
В моем домене все шаблоны создаются конечным пользователем. Как я понимаю, это означает, что с помощью этого aproarch конечный пользователь должен явно весить каждый шаблон. Я сомневаюсь, что это будет подходящим. – jekamax
- 1. peteron перчатка измерение подобия измерение
- 2. Convert 3 измерение 2 измерение
- 3. Измерение качества
- 4. Измерение пикселей
- 5. Измерение задержки
- 6. TabLayout измерение
- 7. Измерение Подразделение
- 8. Настенное измерение
- 9. Измерение ViewPager
- 10. Измерение производительности
- 11. Ось запроса MDX [измерение]. [Измерение]. [Измерение] ведет себя по-разному для разных измерений
- 12. измерение называется «время», но переменная «время» использует другое измерение
- 13. измерение отображаемое html в javascript без влияния на измерение
- 14. соответствия RegEx - остановка первого соответствия
- 15. Измерение шума в android
- 16. Эффективное измерение производительности
- 17. Создания измерение преобразователь C++
- 18. Измерение света в android
- 19. Измерение JSON слишком глубокое
- 20. измерение скорости системного вызова
- 21. измерение dev/urandom эффективность
- 22. Измерение производительности рендеринга WPF
- 23. Измерение реализации срединного фильтра
- 24. Измерение недостающего контекста
- 25. Измерение активности Время загрузки
- 26. Измерение ширины пикселя строки
- 27. Измерение производительности Dalvik
- 28. Измерение затрат на резьбу
- 29. измерение ключевого слова clickstream
- 30. Измерение времени исполнения
Нужно больше кофе, чтобы понять, но, по-видимому, это самый перспективный способ деги. Спасибо. – jekamax