Pattern.compile java

时间:2013-06-19 15:48:01

标签: java regex

如何为文档编写规则,这三个词“在工作中”,“阿兰图灵”,“曼彻斯特大学”?我试着写:

        Pattern p = Pattern.compile("work at && Alan Turing && Manchester University");

但它不起作用,我在三个单词的文档中找不到任何内容!

3 个答案:

答案 0 :(得分:3)

问题有点模糊,但可能是积极的先行可以解决你的问题:

(?=.*?\bwork at\b)(?=.*?\bAlan Turing\b)(?=.*?\bManchester University\b)^.*$

现场演示:http://www.rubular.com/r/MG6eih4syb

答案 1 :(得分:3)

这种情况下你不需要正则表达式。假设文档文本存储为字符串document,您可以执行以下操作:

boolean isDocumentValid = document.contains("at work") && 
                          document.contains("Alan Turing") &&
                          document.contains("Manchester University");

答案 2 :(得分:0)

Java Pattern类是正则表达式或正则表达式的实现。你写的东西看起来不像正则表达式......或者我见过的任何其他文本模式匹配语言。

你可以在很多地方找到关于正则表达式的教程;例如:

一旦你掌握了正则表达式的工作方式,Pattern类的javadoc就会在类概述section中对语法进行简明扼要的总结。

事实上,对于这个特殊问题,正则表达式是一个糟糕的选择。如果你想搜索文档以查看它是否包含两个或更多个没有特定顺序的短语,那么最好的方法是依次搜索每个短语,然后组合3个匹配的结果。

如果您尝试使用单个正则表达式解决此问题,则无论它们出现的顺序如何,您都需要一个复杂的模式来查找它们。你需要使用lookaheads / lookbehinds来模糊一些东西,或者使用枚举排列的模式; e.g。

"A.*B.*C|A.*C.*B|B.*A.*C|B.*C.*A|C.*A.*B|C.*B.*A"  

其中ABC是与相应短语匹配的子模式。

执行3次单独的正则表达式匹配(使用Matcher.find())或简单的字符串匹配(使用String.contains(...))将更容易理解 1 并且可能更有效。


1 - 您是否将此标记为“简单”或“难以理解”取决于您对正则表达式的熟悉程度。