-4

我如何为一个文件写一个规则,里面有“在工作”、“艾伦·图灵”、“曼彻斯特大学”这三个词?我试着写:

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

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

4

3 回答 3

3

问题有点模糊,但积极的前瞻可能会解决您的问题:

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

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

于 2013-06-19T15:51:42.120 回答
3

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

boolean isDocumentValid = document.contains("at work") && 
                          document.contains("Alan Turing") &&
                          document.contains("Manchester University");
于 2013-06-19T15:56:49.700 回答
0

JavaPattern类是正则表达式或正则表达式的实现。你所写的看起来一点也不像正则表达式......或我见过的任何其他文本模式匹配语言。

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

一旦您掌握了正则表达式的工作原理,该类的 javadoc 就会Pattern在类概述部分中对语法进行简要总结。

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

如果您尝试使用单个正则表达式来解决此问题,则需要一个复杂的模式来找到它们,而不管它们出现的顺序如何。您要么需要使用前瞻/后瞻来隐藏一些东西,要么使用枚举排列的模式;例如

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

其中A和是BC相应短语匹配的子模式。

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


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

于 2013-06-19T15:54:29.930 回答