在Java中使用正则表达式

在Java中使用正则表达式,java,regex,Java,Regex,我需要为除:file、for、from之外的所有非空字母序列构建一个正则表达式 因此,我应该从我的文本输入中获取所有值,不包括上述3个单词 这是正确的表达方式吗 ^(?:(?!file|for|from).)*$ 我还试图在java程序中使用这个正则表达式模式,并假设它应该可以工作。但事实并非如此 我的示例代码如下: Pattern p = Pattern.compile("^(?:(?!file|for|from).)*$"); // Split input with the patter

我需要为除:file、for、from之外的所有非空字母序列构建一个正则表达式

因此,我应该从我的文本输入中获取所有值,不包括上述3个单词

这是正确的表达方式吗

^(?:(?!file|for|from).)*$
我还试图在java程序中使用这个正则表达式模式,并假设它应该可以工作。但事实并非如此

我的示例代码如下:

Pattern p = Pattern.compile("^(?:(?!file|for|from).)*$");

// Split input with the pattern

String[] result = 

         p.split("file is not there from for this time for this test");

for (int i=0; i<result.length; i++)

    System.out.println(result[i]);
我的正则表达式中是否有错误,或者我在java中使用正则表达式的方式是否有错误

请告知


谢谢。

您应该这样做:

String s = "file is not there from for this time for this test";
String[] splits = s.split("file|from|for");

这个问题模糊不清。 是否要提取字符串中不属于file、for、from的所有单词? 还是要匹配不包含这些单词的字符串? “for”被拒绝,但“负担得起”又如何呢:接受还是拒绝

就我对这个问题的理解而言,我建议,在一个链条中,抓住不是“文件”、“代表”或“来自”的单词,重新链条如下:


“\b?!文件| for | from\w+'

除非您的问题学习正则表达式,如Isac,我相信您最好使用简单的拆分算法简单地拆分字符串,并手动过滤掉您不希望找到的任何条目。斯普利特是我们的朋友。如果要忽略的单词列表很大,请考虑将它们保存在一个哈希表中,并将每个提取的单词与该表进行检查。这将把您的算法从^2转换为ON

您不仅可以处理更快速、更易于阅读、编写和维护的代码,而且我想,到目前为止,您还没有找到有效的解决方案


我个人的经验是,通常情况下,您的正则表达式变得非常复杂,难以阅读,并且由于使用

你所说的非空字母序列是什么意思?你的意思是你想要所有的非空白序列,不匹配的三个关键字,其中包括数字,标点符号等,但不是空白?所有不匹配的纯字母序列,不包括数字、标点符号、空格等。?还有什么?你为什么需要正则表达式?为什么不直接读取数据,然后删除单词file、for和from?您期望的输出是什么?很难从一个破损的正则表达式中看出您的意图。是的,不要低估简单性的速度和易用性: