是否有机制来衡量或比较模式对给定字符串有多紧?模式我的意思是正则表达式或类似的东西。例如,我们有字符串“foobar”和两个正则表达式:“fooba”。和“。*”这两种模式都与字符串匹配。是否有可能确定“fooba”。是给定字符串更合适的模式,然后“。*”?衡量“匹配”?
衡量“匹配”?
回答
有度量和启发式字符串“距离”。例如,检查这个例子:http://en.wikipedia.org/wiki/Edit_distance
这是随Google搜索一起提供的一个随机Java实现。
http://www.merriampark.com/ldjava.htm
一些指标来计算如此环顾四周,找到一个适合你的需要昂贵。
至于你具体的例子,IIRC,在Java正则表达式匹配通过匹配的长度,然后才能所以如果你使用类似
优先术语“(foobar的)|(。*)”,它将匹配第一你可以通过检查为两个捕获组返回的结果来确定这一点。
这个怎么样的一个想法:使用正则表达式的长度:length("fooba.") > length(".*")
,所以"fooba."
更为具体...
然而,这取决于在正则表达式来自你需要如何精确因为"fo.*|.*ba"
会比"fooba."
长,所以解决方案不会总是有效。
你所要求的并不是正则表达式的真正属性。
创建一个测量“接近度”的枚举,并创建一个将保存给定正则表达式和接近度值的类。这要求您确定哪个正则表达式被认为比另一个更接近。
实例化你的各个类,并让它们在你的代码上松动,并比较匹配的对象,让“最接近”一个出现在顶部。
伪代码,实际上并没有任何比较,或任何类似语言理智:
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
在我的域名中,所有模式均由最终用户制作。据我所知,这意味着通过这种方式,最终用户需要明确地衡量每种模式。我怀疑它会适合。 – jekamax 2012-03-01 12:33:59
- 1. 衡量我的数据如何与模式匹配
- 2. 如何衡量一列的匹配模式?
- 3. Couchbase重新平衡不匹配
- 4. 匹配均衡的嵌套标记
- 5. NPM找不到模块“均衡匹配”
- 6. 使用Powershell匹配变量匹配
- 7. 量角器/茉莉花:与<量的匹配>匹配>
- 8. 衡量返回的匹配结果返回的搜索词的相关性
- 9. 如何衡量?
- 10. 衡量服务
- 11. 微量收集不匹配
- 12. 小写的变量匹配
- 13. 匹配的java变量
- 14. VBA匹配变量范围
- 15. - [R匹配字符向量
- 16. 参数数量不匹配
- 17. HDFS容量不匹配
- 18. Haskell模式匹配向量
- 19. 参数数量不匹配
- 20. [R匹配值与变量
- 21. 匹配某个字符串后的平衡括号
- 22. 匹配在Perl的正则表达式平衡括号
- 23. 的Python:我想匹配数量,而是匹配别的
- 24. 功能匹配 - 匹配的最小数量
- 25. 模式匹配不匹配给定的变量
- 26. 匹配与前一组匹配的字符数量相同
- 27. MongoDB搜索和排序,匹配数量和精确匹配
- 28. NSPredicate用(匹配或匹配)和匹配
- 29. 使用平衡组匹配配置文件中的自定义嵌套结构
- 30. 均衡分配算法
需要更多的咖啡才能理解,但似乎是最可靠的方法。谢谢。 – jekamax 2012-03-01 12:37:31