Java 正则表达式:字符串必须包含单词序列

Java 正则表达式:字符串必须包含单词序列,java,Java,我有这样的代码: 字符串regexp=[\\w\\w]*伦敦[\\w\\w]*巴黎[\\w\\w]*; 字符串test1=伦敦-巴黎; 布尔t1=Pattern.matchesregexp,test1; System.out.printlnt1; 字符串test2=伦敦到巴黎; 布尔t2=Pattern.matchesregexp,test2; System.out.printlnt2; 字符串test3=从伦敦到巴黎; 布尔t3=Pattern.matchesregexp,test3; Sys

我有这样的代码:

字符串regexp=[\\w\\w]*伦敦[\\w\\w]*巴黎[\\w\\w]*; 字符串test1=伦敦-巴黎; 布尔t1=Pattern.matchesregexp,test1; System.out.printlnt1; 字符串test2=伦敦到巴黎; 布尔t2=Pattern.matchesregexp,test2; System.out.printlnt2; 字符串test3=从伦敦到巴黎; 布尔t3=Pattern.matchesregexp,test3; System.out.printlnt3; 字符串test4=来自伦敦->巴黎; 布尔t4=Pattern.matchesregexp,test4; System.out.printlnt4;
我需要所有布尔值都为真。现在,这个条件已经满足了,但在我看来,正则表达式并不太有效。如何更改此设置?

您可以使用比正则表达式更快的方法:

public static boolean isValid(String str) {
        int indexOfLondon = str.indexOf("London");
        int indexOfParis = str.indexOf("Paris");

        return indexOfLondon != -1 && indexOfParis != -1 && indexOfLondon < indexOfParis 
    }

正则表达式在这里是可以避免的。

您可能还需要使用单词边界。像这样的正则表达式:

.*\b(London)\b.*(Paris)\b.*
原因是,您当前的正则表达式也将匹配Londonapris或AlondonaParisaaa。不知道你是否想要

如果在要查找的特定名称周围保留单词边界,这些字符串将不会通过


然而,我支持@Ali Ben Zarrouk的观点,即不需要正则表达式来实现这一点。

定义不太有效。有效指成功地产生期望或预期结果。这将产生预期的结果。[\\w\\w]匹配所有字符,对吗?为什么不直接使用。而是点?我是说代码的美。在我的决定中,[\\w\\w]的重复性让我感到困惑,但那是欺骗!正则表达式很有趣!开玩笑:@Amongalen他们很有趣也很有挑战性,但我从一位正则表达式专家那里听到的第一条规则是尽可能避免它,因为它可能会让人感到困惑和缓慢。我听过一些类似的话:如果你有问题,你认为你可以用正则表达式解决它,那么你有两个问题